Этот вопрос проверяет понимание контекста выполнения this в JavaScript и различий между строгим и нестрогим режимами.
Ключевое слово this в JavaScript ссылается на объект, в контексте которого выполняется функция. В нестрогом режиме, если функция вызывается без контекста, this становится глобальным объектом (window в браузере). В строгом режиме в такой ситуации this будет undefined. Это помогает избежать случайных изменений глобальных переменных и делает код более безопасным.
Поведение ключевого слова this - одна из самых сложных тем в JavaScript, которая значительно отличается между строгим и нестрогим режимами.
thisЗначение this зависит от контекста вызова функции:
В методах объекта - this ссылается на сам объект
В конструкторах - this ссылается на создаваемый экземпляр
В обычных функциях - зависит от режима выполнения
function showThis() {
console.log(this);
}
showThis(); // Window (в браузере) или global (в Node.js)'use strict';
function showThis() {
console.log(this);
}
showThis(); // undefinedthisconst obj = {
name: 'Test',
showThis() {
console.log(this.name);
}
};
obj.showThis(); // "Test" - в обоих режимахfunction Person(name) {
this.name = name;
}
const person = new Person('John');
console.log(person.name); // "John" - в обоих режимахfunction showName() {
console.log(this.name);
}
const obj = { name: 'Alice' };
showName.call(obj); // "Alice" - в обоих режимахВсегда используйте строгий режим для предотвращения ошибок
Используйте стрелочные функции когда нужно сохранить контекст
Явно привязывайте контекст с помощью bind, call, apply когда необходимо
Вывод: Строгий режим делает поведение this более предсказуемым и безопасным, предотвращая случайные обращения к глобальному объекту. Это особенно важно в больших проектах и при работе с модулями.