1

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

        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以这种方式改变?

4

1 回答 1

4

您似乎忘记了var关键字。

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

for (i = 0; ...

将其更改为

for (var i = 0; ...

因为所有不使用 var 关键字编写的循环都会更改同一个i变量(好吧,更准确地说,这样编写的循环会更改i已定义它的封闭范围i

于 2013-10-15T16:59:30.530 回答