Javascript变量澄清

时间:2015-01-22 17:38:11

标签: javascript

我在尝试为我的代码编写一些测试时遇到了这种行为,并且想知道是否有人可以向我解释为什么它没有像我期望的那样执行。

我有以下代码:

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 ...

0 个答案:

没有答案