Javascript词法范围

时间:2011-02-22 05:52:10

标签: javascript

有人可以用简单的语言解释这段代码如何产生9的结果吗?

返回内部函数会发生什么?我m assuming that the enclosing function return is assigned to the variables addTwo and addFive... where does the inner function get its argument (number)? I完全失去了这个,教程没有解释它。

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

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

2 个答案:

答案 0 :(得分:7)

var addTwo = makeAddFunction(2);

<强> 1 即可。 2被指定为amount并绑定在函数范围内。内部add函数可以访问它,因此保持“缓存”。

所以返回的内容基本上是function(number) { number + 2 };


var addFive = makeAddFunction(5);

<强> 2 即可。 <{1}}以相同的方式分配,并返回5

function(number) { number + 5 };
调用了

3。 show(addTwo(1) + addFive(1)); 并将function( number ) {number+2}提供给该函数,因此返回1 2+1

调用了

4。 3并将function( number ){number+5}提供给该函数,因此返回5 5+1

5。 66已添加,因此我们获得了3

<强> 6 即可。 9被提供给9函数。

答案 1 :(得分:2)

makeAddFunction会返回函数add,它会增加数量。

在第var addTwo = makeAddFunction(2);行中,您创建了一个amount 2的函数。 如果您使用某个数字调用该函数(addTwo),则会返回2 + passed argument

通过这个逻辑:addTwo(1) = 2 + 1 = 3

addFive(1) = 5 + 1 = 6

6 + 3 = 9