在循环中使用延迟时,我正在传递循环索引,如下所示
for (var t = 0; t < 3; t++) {
var t1 = {};
t1['a'] = String(t);
setTimeout(function () {
console.log("Step ", t1);
}, 1000);
}
编辑:这里t1
是一个局部变量,即它仅限于一次迭代。
控制台输出
Step Object {a: "2"}
Step Object {a: "2"}
Step Object {a: "2"}
当我使用下面的函数
包装for循环内容时var func = function (index) {
var t1 = {};
t1['a'] = String(index);
setTimeout(function () {
console.log("Step ", t1);
}, 1000);
};
for (var t = 0; t < 3; t++) {
func(t);
}
控制台输出
Step Object {a: "0"}
Step Object {a: "1"}
Step Object {a: "2"}
因此,在第一个例子中,值是通过引用传递的,而第二个例子则不是。
任何人都可以解释这种行为。