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