Лексический и динамический this, повторение стрелочных функций
Посмотрите, как динамический this зависит от места вызова, а стрелочные функции захватывают лексический this; используйте небольшие понятные примеры
«Лексический и динамический this, повторение стрелочных функций» — бесплатный урок JavaScript Academy на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения JavaScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс JavaScript Academy содержит 3 уроков всего.
Общая картина
Цель: понимать, на что указывает this в разных ситуациях.
- Динамический this: определяется местом вызова
- this в arrow: захватывается лексически
- Распространённая ошибка: извлечение метода лишает его this
- Используйте arrow, чтобы сохранять this внутри обратных вызовов

Демонстрация динамического this
Динамический this: вызов в виде obj.method() устанавливает this = obj; извлечение функции лишает её объекта.
// Dynamic this depends on HOW we call the function
const person = {
name: "Ayla",
say: function () {
return "Hi " + this.name;
}
};
console.log("method call:", person.say()); // "Hi Ayla"
// Extract then call: this is lost
const talk = person.say;
console.log("extracted call:", talk()); // likely "Hi undefined" in strict mode -> this is undefined

Arrow = лексический this
Arrow получает this из окружающей функции или области видимости объекта при создании; во время вызова он не меняется.
// Arrow functions capture this from where they are created
const box = {
label: "blue",
showLater: function () {
// Arrow keeps this === box
const fn = () => "box:" + this.label;
return fn();
}
};
console.log("arrow captured this:", box.showLater()); // "box:blue"

Обратные вызовы: сохраняйте this с помощью arrow
В обратных вызовах normal функция часто теряет this, а arrow сохраняет внешний this без изменений.
// Using a normal function in a callback can lose this
const widget = {
id: 7,
normal: function () {
setTimeout(function () {
// here this is not widget in many environments
console.log("normal cb this.id:", this && this.id);
}, 0);
},
arrow: function () {
setTimeout(() => {
// arrow keeps lexical this from arrow()
console.log("arrow cb this.id:", this.id);
}, 0);
}
};
widget.normal();
widget.arrow();

Простое решение для извлечённого метода
Если метод извлечён, оберните его небольшой arrow, замыкающей объект, или привяжите его (в следующем уроке). Для начинающих лучше не усложнять решение.
// If you must extract, wrap with an arrow capturing the object
const account = {
owner: "Mila",
label: function () { return "Owner:" + this.owner; }
};
// Lost this:
const lost = account.label;
console.log("lost:", lost()); // "Owner:undefined" (this missing)
// Fixed: create an arrow that closes over account
const safe = () => account.label();
console.log("fixed via arrow wrapper:", safe());

Хорошие привычки
Советы:
- Методы: вызывайте их как obj.method(), чтобы this был объектом.
- Обратные вызовы: предпочитайте arrow, чтобы сохранять лексический this.
- Извлечённые методы теряют this; оборачивайте их в arrow или привязывайте.

Викторина о this в arrow
Быстрая проверка: поведение this в arrow.

Итоги
Итоги: в normal-функциях this является динамическим (задаётся местом вызова), а в arrow — лексическим (захватывается при создании). Используйте arrow в обратных вызовах и оборачивайте извлечённые методы, чтобы сохранить простое поведение.

Часто задаваемые вопросы
Урок «Лексический и динамический this, повторение стрелочных функций» бесплатный?
Да — полный текст урока «Лексический и динамический this, повторение стрелочных функций» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс JavaScript Academy, подпишись на CoddyKit PRO. Курс JavaScript Academy содержит 3 уроков всего.
Чему я научусь в уроке «Лексический и динамический this, повторение стрелочных функций»?
Посмотрите, как динамический this зависит от места вызова, а стрелочные функции захватывают лексический this; используйте небольшие понятные примеры Ты практикуешь JavaScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать JavaScript Academy?
Предыдущий опыт не требуется. JavaScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.
Сколько времени занимает урок «Лексический и динамический this, повторение стрелочных функций»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке JavaScript Academy?
Да. Каждый урок JavaScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Лексический и динамический this, повторение стрелочных функций
- Подводные камни извлечения методов и частичное применение
- Функциональные альтернативы — явная передача контекста, замыкания и небольшие помощники