Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: this, контекст

Расскажите про this и контекст

Этот вопрос проверяет понимание ключевого понятия JavaScript — this и его поведения в различных ситуациях

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

this в JavaScript — это ключевое слово, которое ссылается на текущий контекст выполнения. Контекст зависит от того, где и как используется this:

  • В методе объекта this указывает на этот объект.

  • В функции this по умолчанию указывает на глобальный объект (в строгом режиме — undefined).

  • В стрелочных функциях this наследуется из внешнего контекста.

Пример:

const obj = {
	name: "Иван",
	greet() {
		console.log(`Привет, ${this.name}!`);
	},
};
obj.greet(); // Привет, Иван!

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

this — это специальное ключевое слово в JavaScript, которое определяет, на какой объект ссылается текущий код. Его значение устанавливается в момент вызова функции, а не в момент её определения, что иногда вызывает путаницу.

Как работает this:

  1. Внутри методов объекта:
    Если функция вызвана как метод объекта, this указывает на этот объект.

    const obj = {
    	name: "Анна",
    	greet() {
    		console.log(`Привет, ${this.name}!`);
    	},
    };
    obj.greet(); // Привет, Анна!
  2. В обычных функциях:

    Если функция вызвана в глобальном контексте (вне строгого режима), this ссылается на глобальный объект (window в браузере, global в Node.js).

    В строгом режиме ('use strict') this будет undefined.

    function showThis() {
    	console.log(this);
    }
    showThis(); // В браузере: window, в строгом режиме: undefined
  3. В конструкторах:
    В функциях-конструкторах this указывает на создаваемый объект.

    function Person(name) {
    	this.name = name;
    }
    const user = new Person("Иван");
    console.log(user.name); // Иван
  4. В стрелочных функциях:
    В стрелочных функциях this наследуется из внешнего контекста, где функция была определена.

    const obj = {
    	name: "Петр",
    	greet: () => {
    		console.log(this.name);
    	},
    };
    obj.greet(); // undefined, так как this у стрелочной функции берётся из глобального контекста

Примеры использования и проблем:

  1. Потеря контекста:
    При передаче метода объекта в переменную или функцию this теряет связь с объектом.

    const obj = {
    	name: "Сергей",
    	greet() {
    		console.log(this.name);
    	},
    };
    const greet = obj.greet;
    greet(); // undefined

    Решение: Использовать bind, стрелочные функции или методы, такие как .call() и .apply().

    const boundGreet = obj.greet.bind(obj);
    boundGreet(); // Сергей
  2. this в обработчиках событий:
    В обработчиках событий this ссылается на элемент, к которому привязан обработчик.

    const button = document.querySelector("button");
    button.addEventListener("click", function () {
    	console.log(this); // Кнопка, на которую нажали
    });
  3. this в классах:
    В методах классов this указывает на экземпляр класса.

    class User {
    	constructor(name) {
    		this.name = name;
    	}
    	greet() {
    		console.log(`Привет, ${this.name}!`);
    	}
    }
    const user = new User("Мария");
    user.greet(); // Привет, Мария!

Заключение

Понимание this помогает избежать типичных ошибок в JavaScript и правильно работать с объектами, функциями и методами. Использование стрелочных функций, строгого режима и привязки контекста (bind) делает работу с this более предсказуемой.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • JavaScript

    JavaScript

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

#this

#контекст

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