我试图寻找可能与以下代码具有相同上下文的过去的问题,但我却找不到(至少从我对Javascript的理解水平)
const button = document.querySelector('button#button');
button.addEventListener('click', loadData);
function loadData() {
const xhr = new XMLHttpRequest();
xhr.addEventListener('load', function() {
console.log(this); // XMLHttpRequest Object
(function() {
console.log('IIFE', this); // Window Object, why??
})();
});
if(this.status === 200) {
console.log(this);
const div = document.querySelector('div#output');
setTimeout(function(){
console.log(this); // Window Object, why??
div.innerHTML = `<h1>${this.responseText}</h1>`;
}, 1500);
}
xhr.send();
}
在尝试了解“ this”如何精确引用对象方面,我很麻烦。
对于第一个console.log,我知道它是在'xhr'上下文中调用的
对于IIFE中的下一个,以及在setTimeout中调用的最后一个,我不了解为什么它会产生Window对象并在全局范围内显示?从我阅读代码的方式来看,所有“ this”都指向xhr对象
谢谢