Fix Blog » Blog Archive » settimeout javascript

settimeout javascript

Синтаксис
timeout_id = window.setTimeout(func|code, delay)

Аргументы
func|code

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

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

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

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

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

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

1    // первый аргумент – строка
2    setTimeout(‘alert("прошла секунда")’, 1000)

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

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

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

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

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

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

1    object = {
2    func: function() { alert(this) }
3    }
4
5    setTimeout( object.func , 1000) // this будет равно window

Пример: Передача this через call

1    object = {
2    func: function() { alert(this) }
3    }
4
5    // правильный вариант с передачей this
6    setTimeout( function() { object.func.call(object) } , 1000)

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

1    …
2    var self = this // промежуточная перменная
3    function fun() {
4    alert(self)
5    }
6    setTimeout(fun, 1000)

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

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

01    <input type="button" onclick="on()" value="Запустить таймаут"/>
02    <input type="button" onclick="off()" value="Остановить отсчет"/>
03    <script>
04    function go() { alert(‘Я сработало’) }
05
06    function on() {
07    timeoutId = setTimeout(go, 3000)
08    }
09
10    function off() {
11    clearTimeout(timeoutId)
12    }
13    </script>



This entry was posted on Среда, Апрель 14th, 2010 at 5:40 пп and is filed under Note. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a Reply

Я не спаммер.