我有一个简单的循环,它通过其他函数从列表中传递一些数据,但是当这些函数返回时,计数器会神秘地增加:
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
的值如何以这种方式改变?
答案 0 :(得分:4)
您似乎忘记了var
关键字。
看看你的代码。以及你拥有的每一个地方
for (i = 0; ...
将其更改为
for (var i = 0; ...
因为在没有var关键字的情况下编写的所有循环都会更改相同的i
变量(更确切地说,这样写的循环会更改已定义它的封闭范围的i
,这通常是全局的,特别是如果你从未正确定义i
)。