javascript中的词法作用域

lexical scoping in javascript

本文关键字:作用域 词法 javascript      更新时间:2023-09-26

我正在读这本书: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函数在php中非常类似。

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)

请参阅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。

数字是多少?Number是返回函数的参数。我觉得你想得太难了。

makeAddFunction(5)有效地返回对function(number) { return number + 5; } 的命名引用