Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: this, binding

Почему теряется контекст this при присваивании метода переменной?

Вопрос проверяет понимание того, как определяется this и почему он зависит от способа вызова функции.

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

Контекст this определяется в момент вызова функции, а не её объявления. При присваивании метода переменной теряется связь с объектом. В результате функция вызывается как обычная, без контекста. Это приводит к undefined или глобальному объекту. Такое поведение — часть спецификации JavaScript.

Длинный ответ

Потеря this — одна из самых частых проблем в JavaScript, особенно при работе с методами объектов.

Как определяется this

Значение this зависит от формы вызова:

  1. Метод объекта
    this указывает на объект слева от точки.

  2. Обычный вызов функции
    this равен undefined в строгом режиме.

В чём возникает проблема

Когда метод присваивается переменной:

const user = {
  name: 'Alex',
  getName() {
    return this.name
  }
}

const fn = user.getName
fn()

Происходит следующее:

  1. метод извлекается из объекта

  2. связь с user теряется

  3. вызов становится обычным

Почему это логично

JavaScript не привязывает this к функции навсегда.
Контекст определяется исключительно способом вызова.

Способы избежать проблемы

  • использовать bind

  • вызывать метод через объект

  • использовать стрелочные функции в качестве колбэков

Вывод

Контекст this теряется при присваивании метода переменной, потому что функция вызывается без объекта-владельца. Это фундаментальное правило языка.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#this

#binding

Подпишись на React Developer в телеграм