mixin, 柯里化, 高阶函数

一. 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, 柯里化, 高阶函数)