Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flasher.ru > Флейм

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 14.07.2003, 15:44
uri-uri вне форума Посмотреть профиль Отправить личное сообщение для uri-uri Найти все сообщения от uri-uri
  № 1  
uri-uri

Регистрация: May 2002
Адрес: Ростов-на_Дону
Сообщений: 542
Attention clearInterval(Id) не действует!!!

Похоже, что у меня проблемы с головой.
Судите сами:

Код:
wait(two, 'isi');

function wait(fun, id){
	this[id]=setInterval(fun, 1000, id);
}
function two(id){
	clearInterval(this[id]);
	delete this[id];
}
Код вызывает функцию wait(), передавая ей в качестве параметров имя второй функции ('two()') и строку имени идентификатора для setInterval ('isi').

Функция 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


Как могут существовать вещи, которые никогда не случаются?
Измена мира к лучшему!

Старый 14.07.2003, 19:07
uri-uri вне форума Посмотреть профиль Отправить личное сообщение для uri-uri Найти все сообщения от uri-uri
  № 2  
uri-uri

Регистрация: May 2002
Адрес: Ростов-на_Дону
Сообщений: 542
Со вторым вопросом я разобрался:

clearInterval(_root[id])

Я нигде явно не указывал привязку переменных, ведь если они находятся в _root, то допускается адресоваться прямо по имени.
А в данном случае это элемент массива _root.
Можно, конечно и так : eval(id), но не думаю, что в след. версиях это будет поддерживаться.

А вот почему интервал продолжает выполняться при
delete this[id] т.е. при физическом удалении его идентификатора? Кто объяснит?
__________________
Uri-Uri


Как могут существовать вещи, которые никогда не случаются?
Измена мира к лучшему!

Старый 14.07.2003, 21:30
llllllllll вне форума Посмотреть профиль Отправить личное сообщение для llllllllll Найти все сообщения от llllllllll
  № 3  
llllllllll

Регистрация: Feb 2001
Сообщений: 1,893
Цитата:
Оригинал написал(а) uri-uri
А вот почему интервал продолжает выполняться при
delete this[id] т.е. при физическом удалении его идентификатора? Кто объяснит?
Потому что, id - это всеголишь индификатор процесса , и удаляя его ты удаляешь не сам процесс, а его номер который ты запомнил в этой самой переменной 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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 02:17.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.