setTimeout

Синтаксис

timeout_id = window.setTimeout(func|code, delay)

Аргументы

func|code
Функция или строка кода для выполнения
delay
Задержка в миллисекундах, т.е 1000 это 1 секунда

Описание, примеры

В отличие от метода setInterval, setTimeout выполняет код только один раз.

В каком виде указывать первый параметр - разницы нет.
При указании строки кода - динамически создается функция func с телом code.

Следующие два вызова почти одинаковы:

Выделить все
setTimeout('alert("прошла секунда")', 1000)
 
function sec() {
  alert("прошла секунда")
}
setTimeout(sec, 1000)

Но более правильным считается объявление функции в явном виде, например так:

setTimeout(function() { alert(...) }, 1000)

Вызов со строкой существует для совместимости с прежними версиями javascript.

this

Функция выполняется в другом контексте, отличном от контекста, в котором задается setTimeout.

При этом значение this = window, поэтому о передаче правильного this надо позаботиться отдельно.

Пример: Без передачи this
object = { 
   func: function() { alert(this) }
}
 
setTimeout( object.func , 1000) // this будет равно window
Пример: Передача this через call
object = { 
   func: function() { alert(this) }
}
 
// правильный вариант с передачей this
setTimeout( function() { object.func.call(object) } , 1000)

Отмена выполнения

Вы можете отменить выполнение setTimeout при помощи clearTimeout, используя для этого идентификатор таймаута.

Пример:
var timeout_id = setTimeout(...)
clearTimeout(timeout_id)
Пример: Рабочий пример
<input type="button" onclick="on()" value="Запустить таймаут"/>
<input type="button" onclick="off()" value="Остановить отсчет"/>
<script>
function go() { alert('Я сработало') }
 
function on() {
    timeoutId = setTimeout(go, 3000)
}
 
function off() {
    clearTimeout(timeoutId)
}
</script>

См. также