javascript中的词法范围

时间:2011-06-19 23:55:37

标签: javascript

我正在读这本书:http://eloquentjavascript.net/我觉得很棒。

但是我很难理解以下函数,函数add(number)从哪里得到它的参数?

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

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

我认为这个show(addTwo(1) + addFive(1));

的答案是7

makeAddFunction(2)中,金额为2,但数量是多少?所以数字+ 2 ......

注意:show function在php中几乎是回声。

3 个答案:

答案 0 :(得分:5)

makeAddFunction返回一个新函数。新函数使用一个参数number,并将其添加到最初提供给makeAddFunction的任何内容中。

var addTwo = makeAddFunction(2);
// addTwo is now a function which you can call with a numeric argument ('number')
// anything you pass to it will have two added to it

var five = addTwo( 3 );  // add two to three (makes five)

答案 1 :(得分:4)

请参阅JAAulde关于makeAddFunction目的是什么的答案,这是主要问题,imo

第二个问题的答案是,您生成两个函数。它们看起来像这样(基本上):

var addTwo = function add(number) {
    return number + 2;
};

var addFive = function add(number) {
    return number + 5;
};

你应该明白为什么:

addTwo(1) + addFive(1)

(1 + 2) + (1 + 5) = 9现在。

答案 2 :(得分:1)

会有什么数字? Number是返回函数的参数。我觉得你太难​​以考虑这个。

makeAddFunction(5)有效地返回对function(number) { return number + 5; }

的命名引用