function makeIncreaseByFunction(increaseByAmount) {
return function (numberToIncrease) {
return numberToIncrease + increaseByAmount;
};
}
makeIncreaseByFunction(3)(10);
Run Code Online (Sandbox Code Playgroud)
为Clarity更新了 有人可以解释为什么(3)(10)的写法是这样的吗?我知道10是作为内部函数的参数提供的,但为什么语法上会这样注明?如果我们有三个嵌套函数,那么参数总是按照(3)(10)(20)中的顺序写出来吗?
带中间变量:
var increaseBy3 = makeIncreaseByFunction(3);
var foo = increaseBy3(10);
Run Code Online (Sandbox Code Playgroud)
没有中间变量:
var foo = makeIncreaseByFunction(3)(10);
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,第一个invokation都将参数传递3给makeIncreaseByFunction,结果它返回已经关闭的内部函数,increaseByAmount其值为3.无论是为返回的中间函数创建变量makeIncreaseByFunction,还是直接调用它,它都会做同样的事情.
你能解释一下var foo = makeIncreaseByFunction(3)(10)中的更多细节吗?10正在进入内在的功能?它只是在语法上与通常在Javascript中传递给我的参数不同. - ggg
makeIncreaseByFunction(3)返回一个函数,特别是里面定义的"内部函数" makeIncreaseByFunction.与所有函数一样,您可以使用function ( arguments )语法调用它.你可以这样写它,如果它对你更有意义:
( makeIncreaseByFunction(3) )(10)
Run Code Online (Sandbox Code Playgroud)
这里发生的事情是makeIncreaseByFunction(3)首先调用并返回«inner函数,然后我们调用?inner function?(10).
如果你手工评估这个(我认为这就是你在语法上的意思),你可以想到它会像这样一步一步地发生:
// Original invocation
var foo = makeIncreaseByFunction(3)(10);
// Substitute the definition of makeIncreaseByFunction
var foo = (function (increaseByAmount) {
return function (numberToIncrease) {
return numberToIncrease + increaseByAmount;
};
})(3)(10);
// Apply the parameter 3
var foo = (function (numberToIncrease) {
return numberToIncrease + 3;
})(10);
// Apply the parameter 10
var foo = 10 + 3;
// Final result
var foo = 13;
Run Code Online (Sandbox Code Playgroud)
注意:如果你想成为技术人员,我们在这里所做的只是两次Beta减少 - 但除非你有Lambda微积分的背景,否则你可能会对它有所帮助!