У меня есть следующий код:
function sayHiLater(){
var greeting = "Hi!";
setTimeout(function() {
console.log(greeting);
}, 3000);
console.log("Hello before hi");
}
sayHiLater();
Я хотел бы лучше понять, как под капотом работают слушатели событий, поэтому в моем примере выше, когда выполняется setTimeOut, что на самом деле происходит? Я знаю, что это создает новый контекст выполнения, но мой вопрос: этот контекст выполнения просто задерживается на 3 секунды, что означает, что стек выполнения тем временем переходит к другим вещам, и по истечении 3 секунд он возвращается к этому контексту выполнения, или он просто переходит к движку браузера какая-то ссылка на аргумент анонимной функции, сообщающая ей, когда запускать, а затем сразу контекст выполнения setTimeOut извлекается из стека выполнения. Или я просто совсем далек от того, что происходит на самом деле. Спасибо за ваше время.
sayHiLater()
s,setTimeout(…)
s или контекст обратного вызова? 05.11.2015setTimeout
, который создает контекст выполнения для вызоваsetTimeout
(который зависит от реализации, посколькуsetTimeout
является собственной функцией хоста). Он создает таймер и планирует аргумент обратного вызова и немедленно возвращается, и с этим возвратом контекст выполнения уничтожается. Затем, когда прошло 3 секунды, и цикл событий подбирает таймер, цикл событий вызывает обратный вызов anon. Только тогда будет создан контекст выполнения для обратного вызова. 05.11.2015