@zlodiak

Почему setTimeout() срабатывает без второго аргумента?

Есть такой код:

setTimeout(() => {
    console.log('hello');
});


Как видите, в этой функции нет второго аргумента(задержки в ms), но тем не менее она срабатывает. Кроме того, если её запустить в консоли браузера хром, то кроме фразы 'hello' выводится какая-то цифра.

Объясните пожалуйста загадочную природу setTimeout
  • Вопрос задан
  • 697 просмотров
Решения вопроса 1
SagePtr
@SagePtr
Еда - это святое
"Какая-то цифра" - это идентификатор таймаута, которую функция возвращает, может быть в дальнейшем использован для передачи в функцию clearTimeout (отменяет таймаут).
А второй аргумент - задержка в милисекундах, если не задано, то используется 0, но в реальности это не значит, что функция будет мгновенно выполнена, может пройти 16 мс или даже больше (в зависимости от нагруженности браузера).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Arik
у меня все сразу работает.

Кроме того, если её запустить в консоли браузера хром, то кроме фразы 'hello' выводится какая-то цифра.

setTimeout() также как и setInterval() возвращают числовой идентификатор счетчика, чтоб можно было по нему отменить через clearTimeout(timeoutId)/clearInterval(intervalId)
Ответ написан
Xuxicheta
@Xuxicheta
инженер
потому что
var timeoutID = scope.setTimeout(function[, delay, param1, param2, ...]);

delay - не обязательный параметр
delay - Optional
The time, in milliseconds (thousandths of a second), the timer should wait before the specified function or code is executed. If this parameter is omitted, a value of 0 is used, meaning execute "immediately", or more accurately, as soon as possible. Note that in either case, the actual delay may be longer than intended; see Reasons for delays longer than specified below.

т.е. если задержка не определена, то выставляется ноль.
А про идентификатор таймера написали уже.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы