Чем отличаются this и замкнутая переменная в методах

Результат: A, B, A, A. bar читает имя текущего получателя, а baz замыкает параметр конкретного вызова make.

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

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

Результат: 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.

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

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

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

Подробнее