【发布时间】:2016-03-15 10:45:27
【问题描述】:
这是一个代码:
var data = [ 'data1', 'data2', 'data3' ];
for (var i = 0; i < data.length; i++) {
var x = data[i];
setTimeout(function() {
console.log(x);
}, i * 100);
}
输出是 'data3' 的 3 倍。我的问题是为什么?
我知道所有 3 个日志方法都将在循环完成后调用,变量 i 将等于 3,但是!
我在循环内定义 x 变量。我希望在每次循环迭代时在本地重新创建这个变量,这样当每个 console.log(x) 方法被调用时,它们都会引用存储在内存中的 3 个不同的变量。
但它看起来像代码:
var x = data[i];
更新相同的变量而不是重新创建它。
有人可以解释一下这种行为吗?
【问题讨论】:
标签: javascript loops asynchronous closures