Функция Self-Invoke JavaScript вызовет исключение переполнения стека - PullRequest
0 голосов
/ 10 июня 2018

Здесь у меня есть функция, которая вызывает себя в функции обратного вызова setTimeout:

function myFunc(){

    // ... I'm doing my jobs here...

    setTimeout(function(){
        myFunc() //self invoke
    },1)
}

myFunc(); // start point

Будет ли этот код в конечном итоге иметь исключение переполнения стека?
Заранее спасибо.

1 Ответ

0 голосов
/ 10 июня 2018

Нет.Функции, поставленные в очередь через setTimeout, запускаются только после завершения основного потока (или любого другого потока, который выполняется в данный момент) - нет вложенных вызовов / вложенных сред, которые могут вызвать переполнение, которое вас беспокоит.Если вы запустите этот фрагмент, вы никогда не столкнетесь с ошибкой, например:

function myFunc(i) {
  if (i % 1000 === 0) console.log(i);
  setTimeout(function() {
    myFunc(++i)
  })
}
myFunc(0);

То же самое относится и к функциям, которые вызывают обещания, которые вызывают себя рекурсивно через .then - это совершенно безопасно.

...