我在尝试为我的代码编写一些测试时遇到了这种行为,并且想知道是否有人可以向我解释为什么它没有像我期望的那样执行。
我有以下代码:
var arr = [];
for (i = 0; i < 5; i++) {
console.log('pushing %s', i);
arr.push(function() {
console.log('logging %s - random %s', i, Math.random());
});
}
for (ai in arr) {
arr[ai]();
}
输出如下内容:
pushing 0
pushing 1
pushing 2
pushing 3
pushing 4
logging 5 - random 0.35618519759736955
logging 5 - random 0.4480402651242912
logging 5 - random 0.9252766149584204
logging 5 - random 0.4456857305485755
logging 5 - random 0.14507507369853556
虽然我期待它输出这样的东西:
pushing 0
pushing 1
pushing 2
pushing 3
pushing 4
logging 0 - random 0.35618519759736955
logging 1 - random 0.4480402651242912
logging 2 - random 0.9252766149584204
logging 3 - random 0.4456857305485755
logging 4 - random 0.14507507369853556
我已经推送到阵列后i
如何变化?为什么i
解析为5
行中的logging ...
,即使它只在4
行中达到pushing ...
?