nodejs settimeout在不同的循环中共享变量

时间:2016-04-18 08:17:28

标签: 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循环有不同的变量name 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

如何理解这一点?

1 个答案:

答案 0 :(得分:1)

ES5中只有功能范围和块范围。您的观察与setTimeout函数无关,但与javascript变量范围

无关

read here