Проверяет понимание области видимости var и потери контекста this при вызове метода объекта отдельно от него.
В JavaScript переменные, объявленные через var, имеют функциональную область видимости, а не блочную. Это значит, что они доступны внутри всей функции, где объявлены, и если объявлены вне функции — становятся глобальными. Метод объекта, вызванный отдельно, теряет связь с объектом, и this внутри него указывает на глобальный объект (в браузере — window).
var name = 'Global';
const obj = {
name: 'Object',
getName: function() {
return this.name;
}
};
console.log(obj.getName()); // 'Object'
const fn = obj.getName;
console.log(fn()); // 'Global' (в браузере) или undefined (в strict mode)При вызове fn() контекст теряется, и this становится глобальным объектом. В строгом режиме ('use strict') this будет undefined, и код вызовет ошибку.
Используйте bind, call или apply для явного указания контекста, либо стрелочные функции, которые не имеют собственного this.
const boundFn = obj.getName.bind(obj);
console.log(boundFn()); // 'Object'Понимание потери контекста критично при работе с колбэками и обработчиками событий. Всегда проверяйте, как вызывается функция, и при необходимости фиксируйте контекст.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию