javascript中的词法作用域
lexical scoping in 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函数在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; }
的命名引用
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- 将作用域存储在JSON中
- 从控制器继承了隔离的作用域以生成可重用的指令
- 从ng模板访问作用域
- 调用私有作用域
- 对父作用域的指令更新延迟了一步
- 正在$rootScope上达到控制器作用域$在内部控制器上
- JavaScript/循环混淆中的动态作用域与词法作用域
- 函数表达式的词法作用域
- javascript是否实现词法作用域
- javascript函数中的词法作用域,为什么代码返回undefined ?
- javascript函数中的词法作用域
- JavaScript词法作用域和变量的生命周期
- 词法作用域变量在getJSON调用中被覆盖后仍保留其值
- Typescript -词法作用域的问题=>这一点
- 我是否应该保留等于$q.defer()的变量,使其具有词法作用域?
- 全球.Eval不能访问词法作用域中的变量.行为是否符合ECMAScript标准
- 词法作用域概念在JavaScript中的确切含义是什么?
- 在chrome开发工具中调试带有词法作用域(闭包)的angularjs指令时的奇怪行为
- javascript中的词法作用域