function times(x){
return function(y){
return function(z){
return x*y*z;
}
};
}
有点混淆这究竟是如何起作用的?该函数如何知道下一个括号是内部返回函数的参数?
console.log(times(2)(5)(2)) // 20
答案 0 :(得分:2)
此:
times(2)
执行函数times
。但看看那个函数返回的是什么:
function times(x){
return function(y){
//...
}
}
它返回一个函数。所以那个函数,作为times(2)
的返回值,本身就可以执行:
times(2)(5)
该函数也返回一个函数,该函数本身也被执行:
times(2)(5)(2)
基本上,在JavaScript中,函数就像任何其他函数一样。它可以作为参数传递,返回,设置为变量,或者只是内联执行而无需命名或以其他方式引用。
所以这个:
times(2)(5)
大致等同于此:
var func = times(2);
func(5);
但是不需要变量来存储该初始返回值,它只是在返回时执行它。
答案 1 :(得分:0)
当您编写times(2)(5)(2)
时,您基本上正在执行((times(2))(5))(2)
,这意味着将评估times(2)
,这将返回一个函数,然后将使用{{1}来评估该函数等等。
一个更好的例子:
(5)
答案 2 :(得分:0)
这意味着第一个函数返回另一个函数,该函数又返回另一个函数。
与一个接一个地调用所有三个函数相同。
var func1 = times(2);
var func2 = func1(3);
var func3 = func2(4);
答案 3 :(得分:0)
一个接一个:
function times(x){
return function first(y){
return function second(z){
return x*y*z;
}
};
}
var progress=times(1);
进步现在是第一个指针,因为第一次被时间返回。 X绑定到它(看看Closures ......)
progress=progress(2);
进展现在排在第二位,第二位是由First返回。
progress=progress(3);//1*2*3
答案 4 :(得分:0)
这个概念叫做currying。
所以它的作用是:
var result1 = times(2); //==> returns a function
var result2 = result1(5); //==> returns a function
var result3 = result2(5); //==> returns a product