Javascript.RU

setTimeout

Синтаксис

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

Аргументы

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

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

Этот метод выполняет код(или функцию), указанный в первом аргументе, асинхронно, с задержкой в delay миллисекунд.

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

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

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

// первый аргумент - строка
setTimeout('alert("прошла секунда")', 1000)
// первый аргумент - функция
function second_passed() {
  alert("прошла секунда")
}
setTimeout(second_passed, 1000)

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

setTimeout(function() { alert('0.5 секунды') }, 500)

Вызов со строкой существует для совместимости с прежними версиями 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)

Как правило, this также передаетя через замыкание, для этого используется либо промежуточная переменная во внешней функции, которая заранее ставится в нужное значение.

...
var self = this // промежуточная перменная
function fun() {
   alert(self)
}
setTimeout(fun, 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>

См. также


Автор: Evgeny (не зарегистрирован), дата: 11 декабря, 2009 - 12:21
#permalink

Единственное место, где нашел корректную передачу контекста в setTimeout!
Существует ли аналогичный способ передачи контекста в анонимно определенную функцию: function(){... /*this - window*/ ...}

Илья, Спасибо!!!
    Евгений.


Автор: Илья Кантор, дата: 26 января, 2010 - 11:48
#permalink

Для передачи контекста используются либо call/apply, либо промежуточная переменная в самой функции, которая заранее ставится в нужное значение.

...
var self = this // промежуточная перменная
function fun() {
   alert(self)
}
setTimeout(fun, 1000)

Автор: mycarisgood (не зарегистрирован), дата: 6 февраля, 2010 - 00:53
#permalink

За clearTimeout() отдельное спасибо!


Автор: Я (не зарегистрирован), дата: 11 февраля, 2010 - 12:27
#permalink

А как передать объект?

setTimeout('myFunc(объект)',1);

???


Автор: Di.X (не зарегистрирован), дата: 18 февраля, 2010 - 05:33
#permalink

Если что-то нужно делать до определенных пор, тогда прописываем все в одной функции и не паримся...Выполнение итераций происходит последовательно с промежутком времени 60 микросекунд. + реализована передача параметра от функции её преемнице...

function set_active(cat)
{
	setTimeout(function(){
        //Делаем что-нибудь... Изменяем какую-либо величину
	if(/* Если величина подходит */)
        setTimeout(function(){set_active(cat);},10);
				      },60);
}

Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
4 + 0 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Статьи и мероприятия

Будьте в курсе наших последних новостей!

Ответьте, пожалуйста..
О чем бы вы хотели услышать на конференции по javascript?

На какие темы послушать доклады? Конференция состоится в середине мая.


Последние обсуждения на форуме
Forum
Последние комментарии