intermediate
this, call, apply и bind
Привязка this в момент вызова, явная привязка, постоянная привязка и лексический this у стрелочных функций.
`this` задаётся местом вызова, а не местом определения функции (кроме стрелочных). `obj.method()` привязывает `this` к `obj`. Отдельный вызов даёт `undefined` в strict mode. `call` и `apply` вызывают с явным `this`; `bind` возвращает обёртку с постоянной привязкой.
Стрелочные функции захватывают лексический `this` из окружающей области и не перепривязываются.
const user = { name: 'Ada', getName() { return this.name; } };
const getName = user.getName;
console.log(getName()); // undefined (strict)
console.log(getName.call({ name: 'Lin' })); // Lin
Извлечение метода (`const fn = obj.method`) теряет receiver — частая ошибка в обработчиках событий.
На интервью объясняйте концепцию на конкретном примере и называйте поведение рантайма, которое проверяют.
Компромисс часто между ясностью и производительностью или между безопасностью и удобством.
Чеклист:
- Смотрите на место вызова.
- Обрабатывайте извлечение метода.
- Используйте bind осознанно; не применяйте стрелочные функции, где нужен динамический this.