![]() |
|
||||||||||
|
|||||
|
Регистрация: May 2002
Адрес: Ростов-на_Дону
Сообщений: 542
|
Похоже, что у меня проблемы с головой.
Судите сами: wait(two, 'isi');
function wait(fun, id){
this[id]=setInterval(fun, 1000, id);
}
function two(id){
clearInterval(this[id]);
delete this[id];
}
Функция wait() выполняет создание переменной и присваивание ей: isi=setInterval() и через 1 сек. вызывает функцию two(), передавая ей в качестве параметра id='isi'. Функция two() выполняет уничтожение - clearInterval(this[id]). То есть: this[id]= isi. А вот и нет (сюрприз, сюрприз)! Уничтожения не происходит. Функция wait() действительно создаёт переменную isi, являющююся идентификатором интервала. И каждый её вызов увеличивает содержимое isi на 1. Но, если в wait() мы через this[id] создаём переменную isi, то в two() через id мы передаём уже не строку 'isi', а ссылку на созданную переменную isi. Значит clearInterval(this[id]) должен уничтожить интервал, но этого не происходит. Более того: delete this[id] уничтожает переменную isi, а интервал продолжает работать!!! Кто сможет обьяснить происходящее? Как уничтожить в данном случае интервал?
__________________
Uri-Uri Как могут существовать вещи, которые никогда не случаются? Измена мира к лучшему! |
|
|||||
|
Регистрация: May 2002
Адрес: Ростов-на_Дону
Сообщений: 542
|
Со вторым вопросом я разобрался:
clearInterval(_root[id]) Я нигде явно не указывал привязку переменных, ведь если они находятся в _root, то допускается адресоваться прямо по имени. А в данном случае это элемент массива _root. Можно, конечно и так : eval(id), но не думаю, что в след. версиях это будет поддерживаться. А вот почему интервал продолжает выполняться при delete this[id] т.е. при физическом удалении его идентификатора? Кто объяснит?
__________________
Uri-Uri Как могут существовать вещи, которые никогда не случаются? Измена мира к лучшему! |
|
|||||
|
Регистрация: Feb 2001
Сообщений: 1,893
|
Цитата:
, и удаляя его ты удаляешь не сам процесс, а его номер который ты запомнил в этой самой переменной id ![]() p.s.: wait("two", 'isi'); function wait(fun, id){ this[id]=setInterval(this, fun, 1000, id); } function two(id){ trace("ok") clearInterval(this[id]); delete this[id]; } |
![]() |
Часовой пояс GMT +4, время: 02:17. |
|
|
« Предыдущая тема | Следующая тема » |
|
|