makeIncreaseByFunction

makeIncreaseByFunction

function makeIncreaseByFunction(increaseByAmount) {
  return function (numberToIncrease) {
    return numberToIncrease + increaseByAmount;
  };
}

makeIncreaseByFunction(3)(10);

更新为清晰度
有人可以解释为什么(3)(10)是这样写的吗?我知道10是作为内部函数的参数提供的,但是为什么在语法上这样表示呢?如果我们有三个嵌套函数,参数是否总是按照(3)(10)(20)的顺序编写?

最佳答案

具有中间变量:

var increaseBy3 = makeIncreaseByFunction(3);
var foo = increaseBy3(10);

没有中间变量:
var foo = makeIncreaseByFunction(3)(10);

在这两种情况下,第一次调用都会将参数3传递给makeIncreaseByFunction,结果是它返回已关闭increaseByAmount且值为3的内部函数。无论是为makeIncreaseByFunction返回的中间函数创建一个变量,还是直接调用它,它都会做同样的事情。


makeIncreaseByFunction(3)返回一个函数,特别是在makeIncreaseByFunction内部定义的“内部函数”。与所有函数一样,您可以使用function ( arguments )语法来调用它。如果这样对您更有意义,则可以这样编写:
( makeIncreaseByFunction(3) )(10)

这里发生的是首先调用makeIncreaseByFunction(3)并返回“内部函数”,然后我们调用⟪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 reductions,但除非您对Lambda微积分有一定的了解,否则可能会给您带来更多困惑,而不是对您有所帮助!

08-18 12:28