Будьте интерпретатором JavaScript.
Давайте посмотрим список задач, которые должен выполнить интерпретатор JavaScript:
TaskList
[Выполнить основной код]
Теперь интерпретатор выполняет задачу построчно.
Выполнение foobar();
интерпретатор JavaScript собирается добавить новую задачу в свой список задач, который содержит функцию setTimeout()
для выполнения.
TaskList
[Выполнить основной код (выполняется)] [Выполнить функцию setTimeout]
Затем, когда он достигает броска, он выдает ошибку и завершает фактическое выполнение задачи.
Он берет следующую задачу и выполняет ее:
TaskList
[Выполнить функцию setTimeout (выполняется)]
Выполняя функцию setTimeout
, она снова выдвигает новое задание (то же самое, что только что выполненное).
И снова, и снова, и снова, и снова ...
function foobar() {
console.log('baz');
setTimeout(() => foobar(), 1000);
}
foobar();
throw new Error('terminate');