Функция берет глобальную переменную, хотя есть локальная

Доброе время суток. Подскажите куда копать... Есть такой код:

let name = 'John';
function printName() {
    console.log(name);
}

setTimeout(() => {
    let name = 'Peter';
    printName();
}, 1000);

Я надеялся, что получу в консоли Peter, а он выводит John. Почему так? Ведь в локальной области видимости, где вызывают printName объявлена переменная name.


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

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

Внутри функции printName никакой переменной name не объявлено. Поэтому значение берется из контекста, где в текущем варианте значение 'John'.

→ Ссылка