Внутренние функции и утрата контекста this

В строгом режиме возникнет TypeError при чтении this.val в самой внутренней функции. В нестрогом окружении она читает глобальное val, обычно undefined, а не container.val.

Короткий ответ

Что ответить на собеседовании

В строгом режиме возникнет 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее