带中间变量:
var increaseBy3 = makeIncreaseByFunction(3);
var foo = increaseBy3(10);
没有中间变量:
var foo = makeIncreaseByFunction(3)(10);
在这两种情况下,第一次调用都将参数传递3
给makeIncreaseByFunction
,结果它返回increaseByAmount
以 的值结束的内部函数3
。无论您是为返回的中间函数创建一个变量makeIncreaseByFunction
,还是直接调用它,它都会做同样的事情。
你能解释一下关于 var foo = makeIncreaseByFunction(3)(10); 的更多细节吗?10 正在进入内部功能?它只是在语法上看起来与通常在 Javascript 中传递给我的参数不同。– ggg
makeIncreaseByFunction(3)
返回一个函数,特别是内部定义的“内部函数” makeIncreaseByFunction
。与所有函数一样,您可以使用function ( arguments )
语法调用它。如果这样对你更有意义,你可以这样写:
( makeIncreaseByFunction(3) )(10)
这里发生的是makeIncreaseByFunction(3)
首先被调用并返回⟪inner function⟫,然后我们调用⟪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;
注意:如果您想成为技术人员,我们在这里所做的只是减少两次 Beta 版——但除非您有 Lambda 演算的背景,否则这可能会让您感到困惑,而不是帮助您!