美文网首页
mixin, 柯里化, 高阶函数

mixin, 柯里化, 高阶函数

作者: Jason_Shu | 来源:发表于2019-01-17 19:02 被阅读0次

    一. mixin

    听起来是个很「高大上」的新功能,但是。。。。其实就是为了把「对象a」的所有属性,复制一份到「对象b」中。

    function mixin(a, b) {
      for(let key in a) {
        b[key] = a[key];
      }
    }
    

    其实就是这么简单的代码。现在ES6语法中有更简单的方式。

    Object.assign(b, a);
    

    二. 柯里化

    我们说「函数」的时候,一般是「x -> y」的映射,两个参数时,「(x, y) -> z」。

    比如:

    f(x, y) = x + 2*y;
    // 我们固定x,设x=1;
    f(1, y) = 1 + 2*y = g(y)
    

    上面这个过程就是「柯里化」。注:不一定只有x,y两个参数,可以是多个参数,然后固定其中一个就可以。

    一些应用:

    var sum = 0;
    
    function add(x) {
        if(x === undefined) {
            return sum;
        } else {
            console.log('x', x)
            sum += x;
            console.log('sum', sum)
            return add;
        }
    }
    
    
    add(1)(2)(3)();  // 6, 结果在sum中
    
    var result = 0;
    
    function sum(...args) {
        if(args.length === 0) {
            return result;
        } else {
            args.map(v => {
                result += v;
            });
            return sum;
        }
    
    }
    
    sum(1,2,3)  // 6
    
    sum(1)(2)(3)  // 6
    
    sum(1,2)(3)  // 6  都存在result变量中
    

    三. 高阶函数
    至少满足以下一个条件,即为「高阶函数」。

    • 接受一个或者多个函数作为输入
    • 输出一个函数

    举例:

    function add(x, y) {
        return x + y;
    }
    
    
    let f = Function.prototype.bind.call(add, undefined, 1);
    
    // 等价于
    // let f = add.bind(undefined, 1);
    

    上述中,bind的参数中其实就有「函数」。

    相关文章

      网友评论

          本文标题:mixin, 柯里化, 高阶函数

          本文链接:https://www.haomeiwen.com/subject/ccxwdqtx.html