Возвращённая обычная функция вызывается без получателя и не наследует this метода say. В нестрогом script без глобального a обычно выводится undefined; в strict mode — TypeError.
Контекст this в функции, возвращаемой методом объекта
Возвращённая обычная функция вызывается без получателя и не наследует 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.