在测试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 变量范围
关于javascript - nodejs settimeout 是否在不同循环中共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36688668/