В строгом режиме возникнет TypeError при чтении this.val в самой внутренней функции. В нестрогом окружении она читает глобальное val, обычно undefined, а не container.val.
Внутренние функции и утрата контекста this
В строгом режиме возникнет TypeError при чтении this.val в самой внутренней функции. В нестрогом окружении она читает глобальное val, обычно undefined, а не container.val.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Какой результат будет выведен в консоль после выполнения следующего JavaScript‑кода?
const container = {
val: 1,
outer() {
return function() {
return function() {
console.log(this.val);
}
}
}
}
container.outer()()();
Ответ
В строгом режиме возникнет TypeError при чтении this.val в самой внутренней функции. В нестрогом окружении она читает глобальное val, обычно undefined, а не container.val.
Контекст container получает только первый вызов outer(). Возвращённые обычные функции вызываются без объекта-получателя и не наследуют this внешнего метода. Чтобы вывести 1, можно вернуть стрелки на обоих уровнях: outer() { return () => () => console.log(this.val); }. Тогда обе функции захватят контекст исходного вызова outer.