Проверяет понимание того, как this ведёт себя в callback-функциях и почему методы массивов вроде filter теряют контекст объекта.
В JavaScript значение this определяется не тем, где функция объявлена, а тем, как она вызвана. Когда вы передаёте метод объекта как callback в filter, движок вызывает эту функцию как обычную, без ссылки на исходный объект. Поэтому this внутри теряется.
Рассмотрим пример:
const user = {
name: 'Anna',
scores: [10, 20, 30],
filterScores() {
return this.scores.filter(function(score) {
return score > this.min; // this здесь не user
});
},
min: 15
};
Внутри обычной функции this не указывает на user, потому что filter вызывает callback без контекста. В строгом режиме это undefined, и обращение к this.min выбросит ошибку.
this, а берёт его из внешней области видимости.const self = this;.filter(callback, thisArg) позволяет передать контекст напрямую.// 1. Стрелочная функция
this.scores.filter(score => score > this.min);
// 2. bind
this.scores.filter(function(score) {
return score > this.min;
}.bind(this));
// 3. thisArg
this.scores.filter(function(score) {
return score > this.min;
}, this);
Стрелочные функции удобнее в большинстве случаев, но их нельзя использовать, если нужен собственный this или arguments. bind и thisArg полезны, когда callback уже определён отдельно.
Итог: применяйте стрелочные функции для коротких callback-ов, а bind или thisArg — когда функция переиспользуется или должна сохранять собственный контекст.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию