setTimeout і setInterval
Обидві функції першим аргументом приймають рядок коду, яку необхідно виконати, або функцію, яку необхідно запустити. Другий аргумент задає затримку в мілісекундах. Повертають обидві функції ідентифікатор створеного таймера.
Зверніть увагу, що рядок коду - це саме рядок, укладена в лапки, а не просто код. Втім передавати рядок не рекомендується. Вона виконується в глобальному контексті, а скрипти, як правило, знаходяться в який-небудь локальної області, в результаті рядок коду, що передається в setTimeout / setInterval не має доступу до даних і функцій скрипта. Та й незручно це - писати код всередині рядка, він навіть не підсвічується.
Дія функцій setTimeout і setInterval можна скасувати функціями clearTimeout і clearInterval відповідно, передаючи останнім ідентифікатор, що відключається таймера.
Простий приклад: при наведенні мишкою на елемент необхідно через дві секунди показати повідомлення. Однак якщо протягом цих двох секунд покажчик миші був прибраний з елемента, то повідомлення показувати не потрібно.
Якщо в clearTimeout / clearInterval переданий недійсний ідентифікатор, то нічого не станеться. Тому в прикладі вище можна не перевіряти, відпрацював чи вже таймер, і що взагалі лежить в timerId.
Замість цього функції setTimeout / setInterval "роблять позначку", що необхідно запустити якийсь код через стільки-то мілісекунд, а скрипт продовжує працювати своєю чергою.
З того, що мова однопотоковий слід ще один наслідок - код виконані не через строго заданий проміжок часу, а не раніше, ніж через цей проміжок. Якщо в потрібний момент часу буде виконуватися якийсь код, то інтерпретатор дочекається його закінчення, після чого тільки запустить код за таймером.
У Firefox функції setTimeout і setInterval передають своїм callback-функцій один числовий параметр, що дорівнює кількості мілісекунд, на які запізнився виклик функції.
На жаль, в інших браузерах даного функціоналу немає.