函数柯里化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// add 函数柯里化
function add() {
//建立args,利用闭包特性,不断保存arguments
var args = [].slice.call(arguments)
//方法一,新建_add函数实现柯里化;
console.log(arguments)
console.log(args)
var _add = function() {
if (arguments.length === 0) {
//参数为空,对args执行加法
return args.reduce((a, b) => {
return a + b
})
} else {
console.log([].push.apply(args, arguments))

//否则,保存参数到args,返回一个函数
;[].push.apply(args, arguments)
return _add
}
}
//返回_add函数
return _add

// //方法二,使用arguments.callee实现柯里化
// return function () {
// if (arguments.length === 0) {
// return args.reduce(function(a,b){return a+b});
// }
// Array.prototype.push.apply(args, arguments);
// return arguments.callee;
// }
}
console.log(add(1, 2, 3)(1)(2)(3)(4, 5, 6)(7, 8)()) //42

转载请保持原始链接

原始链接: https://ru23.com/note/4bf41c9b.html