0

阅读雄辩的 javascript 以尝试将我的头脑围绕在函数上,我阅读了以下示例代码:

function makeAddFunction(amount) {
  function add(number) {
    return number + amount;
  }
  return add;
}

var addTwo = makeAddFunction(2);
var addFive = makeAddFunction(5);
show(addTwo(1) + addFive(1));

我明白了它的要点,但是在几个小时内检查了代码并阅读了几次随附的文本,这对我来说还没有点击:这段代码到底在做什么?函数从哪里add获取number参数?它来自show命令吗?如果是这样,它是如何传播的?我只是没看到...

4

3 回答 3

1

首先,我认为您的代码片段中缺少一些代码,因为就目前而言, show 会抛出未定义的。

但是,这里足以回答您问题的核心。

1) var addTwo 将 2 的值传递给 makeAddFunction。这是“数量”。addTwo 返回一个 add 的实例,其值为 2。

2) var addFive 将 5 的值传递给 makeAddFunction。这是“数量”。addFive 返回一个 add 的实例,其值为 5。

3) addTwo 以数字 1 调用。这将添加到先前的配置值 2 并返回 3。

4) addFive 以数字 5 调用。这将添加到先前的配置值 5 并返回 6。

5) 如果定义了一个显示函数,它将添加 3+6 并显示 9。

于 2013-09-24T18:58:40.870 回答
1

add 函数在哪里获取 number 参数?

=> number 作为 add 的参数传递。当您编写 时addTwo(1),1 将是数字参数。

addTwo 函数在哪里获取 amount 参数?

=> 这称为闭包。当您运行makeAddFunction(2)时,值 2 作为数量传递并被 add 函数捕获。

于 2013-09-24T19:02:24.303 回答
1

该函数makeAddFunction接受一个数字 ( amount) 并返回一个函数,该函数将作为参数传入的数字与传递给外部函数的数字相加。

function makeAddFunction(amount) {
   function add(number) {
     return number + amount;
   }

    return add;
}

调用var addTwo = makeAddFunction(2); 等效于编写以下函数:

   var addTwo = function(number) {
     return number + 2;  // this function is actually returned by makeAddFunction
   }

你可以用参数调用它addTwo(5);

这是一个小提琴: http: //jsfiddle.net/Eh4LK/1/按运行按钮执行

于 2013-09-24T19:04:47.927 回答