Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > переменные в setTimeout


Автор: jone31 25.9.2012, 11:27
в общем ситуация такая:

js скрипт выводит сообщение пользователю, и потом что бы убрать его через setTimeout() вызывается функция которая уберет сообщение... в функцию передается id сообщения... 

id хранится в переменной js. и например если показано три сообщения, то соответственно будет три setTimeout() с разными id что бы скрыть их через 5 сек... но в setTimeout() выполняется всегда с последним переданным ид... 

т.е. setTimeout выполнится три раза с последним ID... а не по одному разу с каждым ID

как сделать что бы setTimeout()  брал значение ид на момент его определения, а не на момент когда он должен выполниться...

Автор: bars80080 25.9.2012, 14:50
делать три разных id. сохранять их в массиве или в атрибуте элемента.

в чём проблема?

Автор: Aliance 25.9.2012, 15:45
Как думаешь, что выведет данный скрипт?
Код

for(var i = 0; i < 5; i++) {
    setTimeout(function() { alert(i); }, 500);
}


Чтобы понять ответ на мой вопрос (а заодно и на свой), http://shamansir.github.com/JavaScript-Garden/#function.closures про замыкания.

Автор: jone31 25.9.2012, 16:38
Цитата(Aliance @  25.9.2012,  15:45 Найти цитируемый пост)
Как думаешь, что выведет данный скрипт?
Код

for(var i = 0; i < 5; i++) {    setTimeout(function() { alert(i); }, 500);}
Чтобы понять ответ на мой вопрос (а заодно и на свой), читаем про замыкания.

я не спрашивал почему setTimeout выдает такие значения...

пока что проблему решил использованием массива...

Автор: skyboy 26.9.2012, 09:24
Цитата(jone31 @  25.9.2012,  15:38 Найти цитируемый пост)
я не спрашивал почему setTimeout выдает такие значения...

конечно, нет.
зато ответ на его вопрос помог бы тебе обойтись без массива сейчас и таких граблей в будущем. 
но — как хочешь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)