§ 简介

函数柯里化就是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

§ 示例

1
2
3
4
5
6
7
var foo = function(a) {
return function(b) {
return a * a + b * b;
}
}

// 这样调用上述函数:(foo(3))(4),或直接foo(3)(4)。

写一个函数:add(1)(2) = 3 add(1,2)(3) = 6?

1
2
3
4
5
6
7
8
9
10
11
function add (a, b) {
var num = 0;
num += a;
if (typeof b === "number") {
num += b;
}
return function (c) {
num += c;
return num;
}
}

写一个函数:add(2)(3)(4) = 9,add(2)(3)(4)(…)参数是不定项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function add(num) {
var sum = 0;
sum += num;
var tempFunc = function (x) {
if (arguments.length === 0) {
return sum;
} {
sum += x;
return tempFunc;
}
}
tempFunc.valueOf = function() {
return sum;
}
tempFunc.toString = function() {
return sum + "";
}

return tempFunc;
}

§ 作用

  • 参数复用
  • 提前返回
  • 延迟计算/运行。