函数柯里化

实际应用

防抖函数和节流函数
https://captaintwo.com/archives/debounce-throttle

柯里化有3个常见作用

  1. 参数复用 - 对部分参数的复用,无需重复添加

  2. 提前返回 - 提前可以返回存在返回值并且可以继续接收参数的函数

  3. 延迟计算/运行 -不断的柯里化,累积传入的参数,最后执行

函数柯里化的最基本原理,个人觉得和new对象有异曲同工之妙,为什么这么说呢!上代码看看就知道了

new对象

class Currying {
    constructor(name) {
        this.name = name;
    }

    hobby(doing = "") {
        return `大家好,我是${this.name},我平时比较喜欢${doing}`
    }
}

// new 对象,将名字传入构造函数
let currying = new Currying("CaptainTwo");
// 输出: 大家好,我是CaptainTwo,我平时比较喜欢打代码
console.log(currying.hobby("打代码"));

柯里化基本原理

let Currying= function (name) {
    let _name = name
    return function (doing) {
        return `大家好,我是${_name},我平时比较喜欢${doing}`;
    };
};

// 将名字传给函数
let hobby = Currying("CaptainTwo");
// 输出: 大家好,我是CaptainTwo,我平时比较喜欢打代码
console.log(hobby("打代码"));

用最好理解的话来说,柯里化就好像一个小对象,和new对象的流程一样,只不过对象里面可以有很多个方法,函数柯里化的初衷还是为上面提到的三点(参数复用提前返回延迟计算/运行),这段代码只是简单基本的,在这些代码结构中的实现中,非常有趣,其中的奥妙还得自己琢磨体会。

代码优化

个人觉得,既然似对象而非对象,那我们就可以用箭头函数(语法糖)来实现,这个写法仅次于简单实现需求,如果是封装式的,需要使用arguments还是得用function来封装,总之代码就是按需求,怎么简单灵活就怎么来。

let person = name => {
    let _name = name
    return doing => `大家好,我是${_name},我平时比较喜欢${doing}`;
    // 或者
    // return doing => {
    //     return `大家好,我是${_name},我平时比较喜欢${doing}`
    // };
};
// 将名字传给函数
let hobby = person("CaptainTwo");
// 输出: 大家好,我是CaptainTwo,我平时比较喜欢打代码
console.log(hobby("打代码"));

这些只是最最最基本的原理,和个人想法,觉得表达不好的同学可以直接评论区讨论

防抖函数和节流函数
https://captaintwo.com/archives/debounce-throttle

文章作者: CaptainTwo
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CaptainTwo
前端 JavaScript NodeJs
喜欢就支持一下吧