Чтобы использовать строку (что вы не должны делать) , вам нужно сделать это:
var a=100;
for (i in array)
{
setTimeout("do_stuff(" + i + ", a)"), 2000);
}
Лучшим ответом будет область действия i
переменная в новом вызове функции, которая возвращает анонимную функцию для setTimeout()
.
function do_stuff( i, a ) {
return function() {
// do something with i and a
}
}
var a=100;
for (i in array)
{
setTimeout(do_stuff( i , a ), 2000);
}
Теперь do_stuff()
возвращает функцию, имеющую ссылку в области видимости на новый i
и a
переменная.Поскольку каждый вызов do_stuff
будет иметь свою собственную область, возвращаемая вами функция будет ссылаться на правильные значения.
РЕДАКТИРОВАТЬ: Не по теме, но если array
на самом деле Array
, тогда вам действительно не следует использовать for-in
, потому что это предназначено для перечисления .С массивом обычно требуется итерация числовых индексов, и поэтому следует использовать стандартный цикл for
.