柯里化2
重要参考:https://github.com/mqyqingfeng/Blog/issues/42
用闭包把参数保存起来,当参数的数量足够执行函数了,就开始执行函数,有没有毛病
第一版
var curry = function (fn) {
// arguments[0]是fn, 这里是收集更多的参数
// 注意,arguments是array-like object,所以要用array的方法
var args = [].slice.call(arguments, 1);
return function() {
// 合并所有参数
var newArgs = args.concat([].slice.call(arguments));
return fn.apply(this, newArgs);
};
};
//应用
function add(a, b) {
return a + b;
}
var addCurry = curry(add, 1, 2);
addCurry() // 3
//或者
var addCurry = curry(add, 1);
addCurry(2) // 3
//或者
var addCurry = curry(add);
addCurry(1, 2) // 3第二版
更易懂的实现
超简洁写法
超超简洁写法
最后更新于
这有帮助吗?