计数器在循环中神秘地增加

时间:2013-10-15 16:51:14

标签: javascript

我有一个简单的循环,它通过其他函数从列表中传递一些数据,但是当这些函数返回时,计数器会神秘地增加:

        for (i = 0; i < list.length; i++) {
            alert(i) // ONE
            doWhatever(list[i]);
            alert(i) // TWO
        }          

doWhatever()看起来像这样:

function doWhatever (obj) {
      for (i in obj) createThing(obj[i]);
}

原始循环中i的值如何以这种方式改变?

1 个答案:

答案 0 :(得分:4)

您似乎忘记了var关键字。

看看你的代码。以及你拥有的每一个地方

for (i = 0; ...

将其更改为

for (var i = 0; ...

因为在没有var关键字的情况下编写的所有循环都会更改相同的i变量(更确切地说,这样写的循环会更改已定义它的封闭范围的i,这通常是全局的,特别是如果你从未正确定义i)。