Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Очень простой как даже по мне вопрос по поводу setTimeout & setInterval (https://javascript.ru/forum/misc/1389-ochen-prostojj-kak-dazhe-po-mne-vopros-po-povodu-settimeout-setinterval.html)

Хранитель Света 07.07.2008 15:19

Очень простой как даже по мне вопрос по поводу 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:

Андрей Параничев 07.07.2008 15:37

Если вы устанавливаете 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:08

Большое спасибо на самом деле!

Dmitry A. Soshnikov 07.07.2008 16:17

Маленькое добавление: передача в кавычках не рекомендуется, т.к. тратится время на парсинг строки. Если функция работает с this, то при вызове через таймАуты / Интервалы, this по дефолту установится в глобальный объект (в браузере - window).

Андрей Параничев 07.07.2008 16:25

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

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

b();

Главное следить за областью видимости, т.е чтобы переменные, перадаваемые как параметры, находились в локальной области видимости при вызове setTimeout/setInterval. (Поэтому я положил вызов тайм-аута в функцию b(), конечно вызов может быть и в общей программе, но тогда переменная получится глобальной).

Хранитель Света 12.07.2008 20:34

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


Часовой пояс GMT +3, время: 12:11.