Javascript 词法范围

标签 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));

最佳答案

var addTwo = makeAddFunction(2);

12 被分配为 amount 并绑定(bind)在函数范围内。内部 add 函数可以访问它,因此将其保持“缓存”状态。

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


var addFive = makeAddFunction(5);

25 以相同的方式赋值,并返回 function(number) { number + 5 };

show(addTwo(1) + addFive(1));

3. function( number ) {number+2} 被调用并且 1 被提供给函数,所以 2返回 +1,即 3

4. function( number ){number+5} 被调用并且 5 被提供给函数,所以 5返回 +1,即 6

5. 添加了 63,所以我们得到 9

69 被提供给 show 函数。

关于Javascript 词法范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5074534/

相关文章:

javascript - 正则表达式获取数组中的所有 JS 类名

javascript - localStorage - 循环遍历 javascript 中特定键的值

javascript - 如何将 JSON 转换为索引数组

javascript - 如何选择没有 ID 的样式表?

javascript - 暂停 for 循环

javascript - 禁用 Google Chrome 上的按钮后的 POST 不起作用

javascript - IFrame 异步加载?如果不是为什么会出现这个错误?

javascript - 该按钮不是通过 TEXT 方法中的变量添加的

javascript - 当脚本在主体树中执行时,DOM 准备好了吗?

javascript - 使用 Jest 对 ThreeJS 应用程序进行单元测试