Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.07.2008, 15:19
Аватар для Хранитель Света
Интересующийся
Отправить личное сообщение для Хранитель Света Посмотреть профиль Найти все сообщения от Хранитель Света
 
Регистрация: 11.05.2008
Сообщений: 20

Очень простой как даже по мне вопрос по поводу setTimeout & setInterval
Хотел бы уточнить:
1.
Если мы пишем setTimeout(delay,t)-то насколько я понимаю то через каждые t мсек вычисляется ЗНАЧЕНИЕ функции.Так ли?
2.Если мы пишем setTimeout(delay(),t)-то через t мсек включается функция.Так ли?
3.Если пишем setInterval(delay,t)-то через каждые t мсек вычисляется выражение функции не останавливаясь до значения false.Так ли?
4.Если мы пишем setInterval(delay(),t)-то через каждые t мсек включается функция без остановки.Так ли?:confused: :confused: :confused:
Ответить с цитированием
  #2 (permalink)  
Старый 07.07.2008, 15:37
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Если вы устанавливаете setTimeout(func, t), то через t миллисекунд выполнится функция func() один раз. Если вы устанавливаете setInterval(func, t), то каждые t миллисекунд будет выполняться функция func. Что бы не вернула функция func() интервал не остановится (если конечно нет критического исключения), остановить интервал можно используя функцию clearInterval.

Параметр func должен быть ссылкой на функцию или строкой с вызовом, так что форма записи setTimeout(func(), t) и setInterval(func(), t) - неверная, насколько я понимаю. Вы можете самостоятельно это проверить запустив, например, такой код:
function a() {
    alert(1);
}

setTimeout(a(), 10000000);


Правильно писать либо setInterval(func, t), либо setInterval("func()", t), либо setInterval(function() {func()}, t). И тоже самое справедливо и для setTimeout.

Последний раз редактировалось Андрей Параничев, 07.07.2008 в 16:15.
Ответить с цитированием
  #3 (permalink)  
Старый 07.07.2008, 16:08
Аватар для Хранитель Света
Интересующийся
Отправить личное сообщение для Хранитель Света Посмотреть профиль Найти все сообщения от Хранитель Света
 
Регистрация: 11.05.2008
Сообщений: 20

Большое спасибо на самом деле!
Ответить с цитированием
  #4 (permalink)  
Старый 07.07.2008, 16:17
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Маленькое добавление: передача в кавычках не рекомендуется, т.к. тратится время на парсинг строки. Если функция работает с this, то при вызове через таймАуты / Интервалы, this по дефолту установится в глобальный объект (в браузере - window).
__________________
Тонкости ECMAScript
Ответить с цитированием
  #5 (permalink)  
Старый 07.07.2008, 16:25
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Еще можно добавить, что для передачи параметров в функцию, выполняющуюся по тайм-ауту, или интервалу, обычно используют такую конструкцию:
function a(s1, s2) {
    alert([s1, s2]);
}

function b() {
    var b = "somestring2";
    setTimeout(function() { a("somestring", b) }, 1000);
}

b();

Главное следить за областью видимости, т.е чтобы переменные, перадаваемые как параметры, находились в локальной области видимости при вызове setTimeout/setInterval. (Поэтому я положил вызов тайм-аута в функцию b(), конечно вызов может быть и в общей программе, но тогда переменная получится глобальной).
Ответить с цитированием
  #6 (permalink)  
Старый 12.07.2008, 20:34
Аватар для Хранитель Света
Интересующийся
Отправить личное сообщение для Хранитель Света Посмотреть профиль Найти все сообщения от Хранитель Света
 
Регистрация: 11.05.2008
Сообщений: 20

Большое спасибо за пример вызова timeout(interval)
сегодня проверил на практике,да на самом деле самый подходящий способ лучше наверное не придумаешь)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Еще один вопрос по setTimeout setInterval Хранитель Света Общие вопросы Javascript 5 12.03.2009 22:37