文本中的函数示例对我没有意义

时间:2013-09-24 18:47:21

标签: javascript function

通过雄辩的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命令吗?如果是这样,它是如何传递的?我只是没有看到它......

3 个答案:

答案 0 :(得分:1)

首先,我认为你的片段中缺少一些代码,因为现在看来,show会抛出undefined。

但是,这里有足够的回答你的问题的核心。

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

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

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

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

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

答案 1 :(得分:1)

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

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

addTwo函数在哪里获取金额参数?

=>这被称为闭包。当您运行makeAddFunction(2)时,值2将作为金额传递,并由添加功能捕获。

答案 2 :(得分: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/按下运行按钮执行