> Почему this равен window, а this.name выводит другое значение в JavaScript (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Домклик

Стек: JavaScript

> Пример ответа

В JavaScript значение this определяется контекстом вызова функции, а не местом её объявления. Когда функция вызывается без явного контекста (например, просто foo()), в нестрогом режиме this ссылается на глобальный объект - в браузере это window.

Однако this.name может выводить другое значение, если в глобальной области видимости объявлена переменная name через var или как свойство window.name. Например:

JAVASCRIPT
var name = 'Alice';
function showThis() {
console.log(this === window); // true
console.log(this.name); // 'Alice'
}
showThis();

Но если name объявлена через let или const, она не становится свойством window:

JAVASCRIPT
let name = 'Bob';
function showThis() {
console.log(this === window); // true
console.log(this.name); // undefined (свойства window.name нет)
}
showThis();

Также window.name может быть предопределённым свойством (например, имя окна браузера), что даст неожиданное значение. В строгом режиме ('use strict') this в такой ситуации будет undefined, и обращение к this.name вызовет ошибку.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью