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.