setTimeout callback в JavaScript

setTimeout() принимает callback-функцию и вызывает ее через заданное время.

setTimeout(function () {
  console.log('Прошла 1 секунда');
}, 1000);

Первый аргумент - функция, которую нужно выполнить позже.

Второй аргумент - задержка в миллисекундах. 1000 миллисекунд равны одной секунде.

Что такое setTimeout callback

Callback в setTimeout() - это функция, которую мы не вызываем сами.

Мы передаем ее в setTimeout(), а браузер вызывает ее после задержки.

function showMessage() {
  console.log('Готово');
}

setTimeout(showMessage, 2000);

Функция showMessage() выполнится примерно через 2 секунды.

Синтаксис

Базовая запись выглядит так:

setTimeout(callback, delay);

callback - функция, которую нужно выполнить позже.

delay - задержка в миллисекундах.

setTimeout(function () {
  console.log('Привет!');
}, 3000);

Этот callback выполнится примерно через 3 секунды.

Именованная функция

В setTimeout() можно передать уже объявленную функцию.

function sendMessage() {
  console.log('Сообщение отправлено');
}

setTimeout(sendMessage, 1000);

Обратите внимание: мы пишем sendMessage, а не sendMessage().

Так мы передаем функцию, а не результат ее вызова.

Анонимная функция

Если функция нужна только для этого таймера, ее можно написать прямо внутри setTimeout().

setTimeout(function () {
  console.log('Показать уведомление');
}, 1500);

Такая функция не имеет имени и вызывается только таймером.

Стрелочная функция

Часто callback для setTimeout() записывают стрелочной функцией.

setTimeout(() => {
  console.log('Данные загружены');
}, 1000);

Для короткого действия можно записать еще компактнее.

setTimeout(() => console.log('Готово'), 1000);

Передача аргументов

Если callback-функции нужны аргументы, их можно передать после задержки.

function greetUser(name) {
  console.log('Привет, ' + name + '!');
}

setTimeout(greetUser, 1000, 'Анна');

Результат через 1 секунду:

Привет, Анна!

Значение ‘Анна’ попадет в параметр name.

Можно сделать и через стрелочную функцию.

setTimeout(() => {
  greetUser('Игорь');
}, 1000);

Такой вариант часто удобнее, если внутри нужно выполнить несколько действий.

Почему функцию передают без скобок

Самая частая ошибка с setTimeout() - вызвать функцию сразу.

function showMessage() {
  console.log('Привет!');
}

setTimeout(showMessage(), 1000);

В этом примере функция showMessage() выполнится сразу, а не через секунду.

Правильный вариант:

setTimeout(showMessage, 1000);

Когда мы пишем имя функции без скобок, мы передаем саму функцию как callback.

setTimeout не останавливает код

setTimeout() не ставит весь код на паузу.

setTimeout(() => {
  console.log('Второе сообщение');
}, 1000);

console.log('Первое сообщение');

Результат:

Первое сообщение
Второе сообщение

JavaScript запускает таймер и сразу продолжает выполнять следующий код.

Итого

1. Callback в setTimeout() - это функция, которая выполнится позже.

2. Первым аргументом передают функцию, вторым - задержку в миллисекундах.

3. Именованную функцию передают без скобок: setTimeout(showMessage, 1000).

4. Если написать showMessage(), функция вызовется сразу.

5. setTimeout() не останавливает код, а только планирует выполнение callback-функции.