javascript - nodejs settimeout 是否在不同循环中共享变量

标签 javascript node.js

在测试Nodejs的settimeout函数时,将settimeout放在两个for循环中,如果两个for循环的变量名i相同,则看来两个settimeout函数共享该变量。

代码:

for (var i = 1; i <= 3; i++) { 
    var tm1=setTimeout(function(){
         console.log(i); 
            }, 0); 
}
for (var i = 1; i <= 4; i++) {
    (function (x) {
        var tm2=setTimeout(function () { console.log(x); }, 100);
    })(i);
}

结果:6 6 6 1 2 3 4 5
如果 for 循环有不同的变量名称 n 和 i,结果看起来没问题

代码:

for (var n = 1; n <= 3; n++) { 
    //change the variable name from i to n
    setTimeout(function(){
         console.log(n); 
            }, 0); 
}
for (var i = 1; i <= 5; i++) {
    (function (x) {
        var tm2=setTimeout(function () { console.log(x); }, 100);
    })(i);
}

结果:4 4 4 1 2 3 4 5

如何理解这一点?

最佳答案

ES5 中只有函数作用域,没有 block 作用域。您的观察与 setTimeout 函数无关,而是与 javascript 变量范围

read here

关于javascript - nodejs settimeout 是否在不同循环中共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36688668/

相关文章:

javascript - FlotCharts 两种颜色的背景

javascript - 调整浏览器窗口大小时禁用 jquery 插件

javascript - 基于 name 属性而不是 id 使用 jQuery 循环元素

javascript - React Native如何调用onPress事件?

javascript - 有什么方法可以使 javascript 中的嵌套回调代码更具可读性吗?

node.js - 找不到模块 module.js :471 throw err:

node.js - 具有合并流的 gulp-order Node 模块

javascript - Android 在具有 CSS 溢出属性的 HTML 容器内滚动

javascript - express js 静态相对父目录

javascript - super 代理的编码问题