在测试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
如何理解这一点?