当然,代码只会执行您的操作。
但我很困惑为什么在以下代码中:
var a = {
0: "Hi",
1: "Bye"
}
for (var b in a) {
setTimeout(function () {
console.log(b);
}, 1000);
}
而不是安慰“0”然后“1”
我只是两次获得“1”。
我不确定为什么会这样。对于我正在制作的剧本,我需要这样的设置,但我也遇到同样的问题。
答案 0 :(得分:4)
这是因为你对闭包的使用是错误的。
在这种情况下,您在b
回调中使用闭包变量setTimeout
,但在执行回调之前,不会查找变量b
的值,然后是更新为对象中最后一个值的值。
在这种情况下的解决方案之一是创建一个本地闭包,如下所示
for (var b in a) {
(function(c){
setTimeout(function () {
console.log(c);
}, 1000);
})(b)
}
演示:Fiddle
答案 1 :(得分:1)
你也可以这样做
for (var b in a) {
setTimeout(console.log.bind(console, b), 1000);
}
或者像这样
for (var b in a) {
setTimeout(function(c) {
console.log(c)
}.bind(null, b), 1000);
}
或者甚至喜欢这个
// compatibility varies
for (var b in a) {
setTimeout(function(c) {
console.log(c)
}, 1000, b);
}