Порядок вывода: undefined, 5, undefined, 10. У внешней функции и callback таймера разные локальные var c, каждая из которых до присваивания равна undefined.
Печать переменной c с учётом всплытия и тайм‑аута
Порядок вывода: undefined, 5, undefined, 10. У внешней функции и callback таймера разные локальные var c, каждая из которых до присваивания равна undefined.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В функции выводятся значения переменной c в разных точках выполнения, демонстрируя поведение всплытия (hoisting) и работу асинхронного setTimeout.
function l() {
console.log(c);
var c = 5;
setTimeout(function() {
console.log(c);
var c = 10;
console.log(c);
}, 100);
console.log(c);
};
l()
Ответ
Порядок вывода: undefined, 5, undefined, 10. У внешней функции и callback таймера разные локальные var c, каждая из которых до присваивания равна undefined.
Первый console.log в l читает её поднятую локальную c до присваивания 5. Затем регистрируется таймер и синхронно печатается 5. В callback собственное var c затеняет внешнюю переменную на всём протяжении функции, поэтому первое чтение там даёт undefined, а не 5. После присваивания 10 второй callback-log выводит 10.