Поиск…


Синтаксис

  • timeoutID = setTimeout (функция () {}, миллисекунды)
  • intervalID = setInterval (функция () {}, миллисекунды)
  • timeoutID = setTimeout (функция () {}, миллисекунды, параметр, параметр, ...)
  • intervalID = setInterval (функция () {}, миллисекунды, параметр, параметр, ...)
  • clearTimeout (timeoutID)
  • clearInterval (intervalID)

замечания

Если задержка не указана, по умолчанию она равна 0 миллисекундам. Однако фактическая задержка будет больше, чем это ; Например, спецификация HTML5 указывает минимальную задержку в 4 миллисекунды.

Даже когда setTimeout вызывается с задержкой нуля, функция, вызываемая setTimeout будет выполняться асинхронно.

Обратите внимание, что многие операции, такие как манипуляция DOM, не обязательно завершаются, даже если вы сделали операцию и перешли к следующему кодовому предложению, поэтому не следует предполагать, что они будут работать синхронно.

Использование setTimeout(someFunc, 0) завершает выполнение функции someFunc в конце стека вызовов текущего JavaScript-движка, поэтому функция будет вызываться после завершения этих операций.

Вместо функции можно передать строку, содержащую код JavaScript ( setTimeout("some..code", 1000) ) ( setTimeout(function(){some..code}, 1000) ). Если код помещается в строку, он будет позже разобран с помощью eval() . Тайм-ауты в стиле String не рекомендуются для производительности, ясности и иногда соображений безопасности, но вы можете увидеть более старый код, который использует этот стиль. Передача функций поддерживалась с Netscape Navigator 4.0 и Internet Explorer 5.0.

Интервалы

function waitFunc(){
    console.log("This will be logged every 5 seconds");
}

window.setInterval(waitFunc,5000);

Удаление интервалов

window.setInterval() возвращает IntervalID , который может использоваться, чтобы остановить этот интервал от продолжения работы. Для этого сохраните возвращаемое значение window.setInterval() в переменной и вызовите clearInterval() с этой переменной в качестве единственного аргумента:

function waitFunc(){
    console.log("This will be logged every 5 seconds");
}    

var interval = window.setInterval(waitFunc,5000);

window.setTimeout(function(){
    clearInterval(interval);
},32000);

Это будет регистрироваться. This will be logged every 5 seconds каждые 5 секунд, но остановит его через 32 секунды. Таким образом, он будет регистрировать сообщение 6 раз.

Удаление тайм-аутов

window.setTimout() возвращает TimeoutID , который может использоваться для остановки этого тайм-аута. Для этого сохраните возвращаемое значение window.setTimeout() в переменной и вызовите clearTimeout() с этой переменной в качестве единственного аргумента:

function waitFunc(){
    console.log("This will not be logged after 5 seconds");
}
function stopFunc(){
    clearTimeout(timeout);
}

var timeout = window.setTimeout(waitFunc,5000);
window.setTimeout(stopFunc,3000);

Это не приведет к регистрации сообщения, потому что таймер остановлен через 3 секунды.

Рекурсивный setTimeout

Чтобы повторить функцию неограниченно, setTimeout можно вызывать рекурсивно:

function repeatingFunc() {
    console.log("It's been 5 seconds. Execute the function again.");
    setTimeout(repeatingFunc, 5000);
}

setTimeout(repeatingFunc, 5000);

В отличие от setInterval , это гарантирует, что функция будет выполняться, даже если время работы функции больше указанной задержки. Однако он не гарантирует регулярный интервал между выполнением функций. Такое поведение также меняется, поскольку исключение перед рекурсивным вызовом setTimeout не позволит повторить повторение, в то время как setInterval будет повторяться неопределенно независимо от исключений.

setTimeout, порядок операций, clearTimeout

SetTimeout

  • Выполняет функцию после ожидания указанного количества миллисекунд.
  • используется для задержки выполнения функции.

Синтаксис: setTimeout(function, milliseconds) или window.setTimeout(function, milliseconds)

Пример: этот пример выводит «привет» на консоль через 1 секунду. Второй параметр - в миллисекундах, поэтому 1000 = 1 с, 250 = 0,25 с и т. Д.

setTimeout(function() {
    console.log('hello');
}, 1000);

Проблемы с setTimeout

если вы используете метод setTimeout в цикле for :

for (i = 0; i < 3; ++i) {
  setTimeout(function(){
    console.log(i);
  }, 500);
}

Это выведет значение 3 three раза, что неверно.

Обход проблемы:

for (i = 0; i < 3; ++i) {
  setTimeout(function(j){
    console.log(i);
  }(i), 1000);
}

Он выдает значение 0 , 1 , 2 . Здесь мы передаем i в функцию как параметр ( j ).

Порядок операций

Кроме того, хотя из-за того, что Javascript является однопоточным и использует глобальный цикл событий, setTimeout можно использовать для добавления элемента в конец очереди выполнения, вызывая setTimeout с нулевой задержкой. Например:

setTimeout(function() {
    console.log('world');
}, 0);

console.log('hello');

Будет фактически выводить:

hello
world

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

Отмена таймаута

clearTimeout (): останавливает выполнение функции, указанной в setTimeout()

Синтаксис: clearTimeout (timeoutVariable) или window.clearTimeout (timeoutVariable)

Пример :

var timeout = setTimeout(function() {
    console.log('hello');
}, 1000);

clearTimeout(timeout); // The timeout will no longer be executed

Интервалы

стандарт

Вам не нужно создавать переменную, но это хорошая практика, так как вы можете использовать эту переменную с clearInterval для остановки текущего интервала.

var int = setInterval("doSomething()", 5000 ); /* 5 seconds */
var int = setInterval(doSomething, 5000 ); /* same thing, no quotes, no parens */

Если вам нужно передать параметры функции doSomething, вы можете передать их в качестве дополнительных параметров за первые два, чтобы установитьInterval.

Без перекрытия

setInterval, как указано выше, будет выполняться каждые 5 секунд (или независимо от того, что вы установите) независимо от того, что. Даже если функция doSomething занимает более 5 секунд для запуска. Это может создать проблемы. Если вы просто хотите убедиться, что есть пауза между запусками doSomething, вы можете сделать это:

(function(){

   doSomething();

   setTimeout(arguments.callee, 5000);

})()


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow