setTimeout помогите разобраться

всем привет! объясните, как это так получается, что после того, как timerId был присвоен метод с функцией, вызывающей модальное окно, в этой же функции снова вызывается функция timerId?

let timerId = setTimeout(function tick() {
  alert('tick');
  timerId = setTimeout(tick, 2000); // 
}, 2000);


Ответы (2 шт):

Автор решения: Igor

Возможно, так это легче понять:

function tick() {
  console.log('tick', timerId);
  timerId = setTimeout(tick, 2000);
}
let timerId = setTimeout(tick, 2000);

Еще проще, так как timerId не используется:

function tick() {
  console.log('tick');
  setTimeout(tick, 2000);
}
setTimeout(tick, 2000);

→ Ссылка
Автор решения: Даниил Бирюков

Я бы не советовал использовать setTimeOut() в рекурсии, из-за риска переполнения стека вызовов. В случаях, когда необходимо вызывать некоторую функцию интервально по времени в JS существует специальный метод setInterval(handler, time).

Данный код можно переписать на:

let timerId = setInterval(function() {
  alert('tick');
}, 2000);

При необходимости, можно остановить интервал:

clearInterval(timerId);

→ Ссылка