Как определяется this и чем его поведение отличается в strict mode?

Как определяется this и чем он отличается в strict mode this отражает контекст, в котором вызывается функция В non-strict mode при обычном вызове this обращается к глобальному объекту (window/node global) В strict…

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

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

Как определяется this и чем он отличается в strict mode this отражает контекст, в котором вызывается функция В non-strict mode при обычном вызове this обращается к глобальному объекту (window/node global) В strict mode при обычном вызове this сохраняет значение undefined, исключая неявное обращение к глобальному контексту При вызове метода this в обоих режимах указывает на объект, через который выполняется вызов Строгий режим обеспечивает более жесткий контроль контекста и уменьшает вероятность ошибок, связанных с неявной привязкой this Практическая польза заключается в создании более безопасного и предсказуемого кода без случайного…

Подробный разбор

Ответ с пояснениями

Как определяется this и чем он отличается в strict mode

  • this отражает контекст, в котором вызывается функция
  • В non-strict mode при обычном вызове this обращается к глобальному объекту (window/node global)
  • В strict mode при обычном вызове this сохраняет значение undefined, исключая неявное обращение к глобальному контексту
  • При вызове метода this в обоих режимах указывает на объект, через который выполняется вызов
  • Строгий режим обеспечивает более жесткий контроль контекста и уменьшает вероятность ошибок, связанных с неявной привязкой this
  • Практическая польза заключается в создании более безопасного и предсказуемого кода без случайного появления глобальных переменных
  • Главное отличие проявляется при вызове функции не через объект: в strict mode получается undefined, а в non-strict mode — глобальный объект

Подробный ответ

Основной ответ

this в JavaScript обозначает контекст вызова функции — объект, с которым связано выполнение этой функции. При обычном вызове без объекта (foo()) в режиме non-strict this указывает на глобальный объект: это window в браузере и global в Node.js. В режиме strict mode ("use strict") при аналогичном вызове значение this будет равно undefined. Такое поведение предотвращает непреднамеренный доступ к глобальному объекту и делает код безопаснее.

Ключевые моменты

  • В non-strict mode:
  • В глобальном контексте (this за пределами функций) используется глобальный объект.
  • При обычном вызове функции this указывает на глобальный объект, если вызов не выполняется через объект.
  • В strict mode:
  • Если обычная функция вызывается с this без контекста, this получает привязку к undefined.
  • Неявная привязка к глобальному объекту исключается, благодаря чему уменьшается количество ошибок и повышается предсказуемость поведения.
  • В методах объектов и конструкторах this работает одинаково в обоих режимах: он указывает на объект-владелец либо на создаваемый экземпляр.

Практический контекст

В React 18 и TypeScript строгий режим считается стандартом: он помогает предотвращать ошибки, вызванные неявным this. В серверном Node.js strict mode включён по умолчанию для модулей ES6, что поддерживает безопасную разработку и предотвращает утечки глобального состояния. В современном коде также часто применяют стрелочные функции: у них нет собственного this, поэтому они получают контекст из лексического окружения. Это совместимо со строгим режимом и упрощает работу с методами.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку