Я прочитал какой-то другой ответ по этой теме, но я не уверен, что понимаю, как ключевое слово this
работает внутри addEventListener
.
const button = document.querySelector('button');
function foo() { console.log(this) }
button.addEventListener('click', foo);
foo
- это обычная функция внутри addEventListener
, это не метод для button
объекта. Когда вызывается foo
, он должен выполняться в контексте глобального объекта, поэтому this
должно быть равно window
, а не button
.
Похоже на ситуацию, подобную этому примеру :
const obj = {
method: function (cb) {
console.log('method', this); // `this` === `obj`
return cb();
}
};
obj.method(function() {
console.log('cb', this); // `this` === `window`
});
Где obj
может рассматриваться как button
, method
может быть addEventListener
и cb
обратным вызовом внутри addEventListener
.
Я знаю, что могу использовать bind
для изменения контекста this
, но я хочу глубже понять, почему он так работает.
Почему this
внутри addEventListener
обратного вызова вызывается в контексте текущего элемента вместо глобального объекта?