nodejs-settimeout是否在不同的循环中共享变量
does nodejs settimeout share variable in different loops
在测试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中只有函数作用域,没有块作用域。您的观察结果与setTimeout
函数无关,而是与javascript变量范围有关
阅读此处
相关文章:
- 在索引.html和应用.js [node.js] 之间共享变量
- 在Knockoutjs中的ViewModels之间共享变量状态
- 使用javascript使用for循环声明变量
- 共享变量和多个控制器AngularJS
- JavaScript:For循环传递变量
- 在两个浏览器选项卡之间共享变量范围
- Javascript创建函数,以便在其他函数之间共享变量
- 为什么原型允许多个实例共享变量
- 关于node.js/javascript在文件之间共享变量
- 基于循环创建变量
- 在 AngularJS 和非 AngularJS 弹出窗口之间共享变量
- 循环索引变量的节点 JS 丢失
- nodejs-settimeout是否在不同的循环中共享变量
- 在Ember.js中的方法之间共享变量上下文
- 循环 += 十进制变量的 javascript 有问题
- 使用NodeJS与客户端共享变量
- 在页面之间共享变量
- 共享工作者确实共享变量
- 在Javascript中的函数之间共享变量
- .forEach循环:使用变量