繁体   English   中英

嵌套函数中的同名变量

[英]Variables with the same name in nested functions

我正在阅读你不知道的 JS,下面的例子让我有点困惑:

function foo () {
    function bar (a) {
        i = 3; // changing the `i` in the enclosing scope's for-loop
        console.log(a + i);
    }

    for (var i = 0; i < 10; i++) {
        bar(i * 2); // oops, infinite loop ahead!
    }
}

foo();

引擎不会在 for 循环中查找(并坚持赋值) i ,因为它已经声明并且在foo的范围内?

为什么它会去到酒吧里面的i

此外,即使i的值被重新分配为 3,它不会每次仍然增加 1,从而避免无限循环吗?

Javascript 具有提升的概念。您可以在声明变量之前使用变量。 在执行代码之前,javascript 会将所有声明变量的语句带到顶部,从而使 i 的范围在 for 和 bar 中相同。

您可以在此处阅读有关提升的信息https://www.w3schools.com/js/js_hoisting.asp

因为bari没有用var声明,所以它使用它在外部作用域中可以找到的第一个ifooi 所以会发生这种情况:

  1. for循环将i设置为0
  2. bar(0); i设置为3
  3. for循环将i3增加到4
  4. bar(8); i设置为3 ...

第 3 步和第 4 步无休止地重复,因为i<10总是true

(这种事情就是我不喜欢 JavaScript 的原因。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM