function times(x){
return function(y){
return function(z){
return x*y*z;
}
};
}
有些困惑,这是如何工作的?该函数如何知道下一个括号是内部返回函数的参数?
console.log(times(2)(5)(2)) // 20
this:
times(2)
执行函数times
。但是查看该功能返回的内容:
function times(x){
return function(y){
//...
}
}
它返回功能。因此可以执行函数作为times(2)
的返回值:
times(2)(5)
该函数也返回一个函数,该功能本身也将执行:
times(2)(5)(2)
基本上,在JavaScript中,函数是一个与其他对象一样。它可以作为参数传递,返回,设置为变量,或者只是内联执行,而无需命名或以其他方式引用。
所以:
times(2)(5)
IS 大致相当于:
var func = times(2);
func(5);
但无需一个变量存储该初始返回值,它只是在返回时在线执行。
编写times(2)(5)(2)
时,您基本上是在执行((times(2))(5))(2)
,这意味着将评估times(2)
,它将返回一个函数,然后将使用(5)
等评估该函数。
一个更好的例子:
function a(){
return {b: 'c'}
}
a().b //c
它意味着第一个功能返回另一个函数,又返回另一个函数。
它与一个接一个地调用所有三个函数相同。
var func1 = times(2);
var func2 = func1(3);
var func3 = func2(4);
一个接一个:
function times(x){
return function first(y){
return function second(z){
return x*y*z;
}
};
}
var progress=times(1);
进度现在是第一个指针,因为第一次是由时代返回的。X与之绑定(请查看关闭...(
progress=progress(2);
进度现在是第二名,因为第二次返回。
progress=progress(3);//1*2*3
该概念称为咖喱。
那么,它的作用是:
var result1 = times(2); //==> returns a function
var result2 = result1(5); //==> returns a function
var result3 = result2(5); //==> returns a product