Контекст this в функции, возвращаемой методом объекта

Возвращённая обычная функция вызывается без получателя и не наследует this метода say. В нестрогом script без глобального a обычно выводится undefined; в strict mode — TypeError.

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

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

Возвращённая обычная функция вызывается без получателя и не наследует this метода say. В нестрогом script без глобального a обычно выводится undefined; в strict mode — TypeError.

Подробный разбор

Ответ с пояснениями

Условие

Какой вывод появится в консоли после выполнения следующего кода?

const obj = {
    a: 1,
    say() {
        return function() {
            console.log(this.a);
        }
    }
}

obj.say()();

Ответ

Возвращённая обычная функция вызывается без получателя и не наследует this метода say. В нестрогом script без глобального a обычно выводится undefined; в strict mode — TypeError.

В strict mode this внутри отдельного вызова равно undefined, поэтому чтение this.a ошибочно. Чтобы сохранить объект, верните стрелку: return () => console.log(this.a). Тогда при obj.say()() она замкнёт this вызова say и напечатает 1.

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

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

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

Подробнее