43.函数柯里化

在学习JavaScript的一些总结和经验,供大家参考和学习,同时也欢迎大家参与讨论。

题目:写一个sum方法,当使用下面的语法调用时能够正常工作?

console.log(sum(2,3));

console.log(sum(2)(3));

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function sum(x) {
if (arguments.length == 2) {
return arguments[0] + arguments[1];
} else {
return function(y) { return x + y };
}
}
function sum(x, y) {
if (y !== undefined) {
return x + y;
} else {
return function (y) { return x + y; };
}
}

扩展:那么sum(1, 2, 3, 4)和sum(1)(2)(3)(4)呢?sum(1)(2)(3)(……)呢?

有待完善

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
function add (x) {
var args = Array.prototype.slice.call(arguments);
if (args.length == 1) {
var result = x;
var fn = function (y) {
result += y;
return fn;
}
fn.toString = function () {
return result;
}
return fn;
} else {
var len = args.length, result = 0;
for(var i = 0; i < len; i++ ) {
result += args[i];
}
return result;
}
}
console.log(add(9))
console.log(add(1,2,4,5));
console.log(add(1)(2)(4)(5));
console.log(add(2,3));
console.log(add(2)(3));

https://www.cnblogs.com/coco1s/p/6509141.html


文章标题: 43.函数柯里化
文章作者: 王奕聪,QQ:1301842163
许可协议: 知识共享许可协议
©署名-非商用-相同方式共享 4.0