Результат: A, B, A, A. bar читает имя текущего получателя, а baz замыкает параметр конкретного вызова make.
Чем отличаются this и замкнутая переменная в методах
Результат: A, B, A, A. bar читает имя текущего получателя, а baz замыкает параметр конкретного вызова make.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дан код:
function make(name) {
return { name, bar() { return this.name; }, baz: () => name };
}
const a = make('A');
const b = make('B');
b.bar = a.bar;
b.baz = a.baz;
console.log(a.bar(), b.bar(), a.baz(), b.baz());
Определите результат.
Ответ
Результат: A, B, A, A. bar читает имя текущего получателя, а baz замыкает параметр конкретного вызова make.
Присваивание функции другому свойству не пересоздаёт её лексическое окружение. Поэтому b.baz продолжает читать name из make('A'), а вызов b.bar назначает this объектом b. Если изменить a.name, bar увидит новое поле, но baz всё ещё вернёт первоначальный параметр name.