在javascript

时间:2018-07-26 17:10:23

标签: javascript ajax this

我试图寻找可能与以下代码具有相同上下文的过去的问题,但我却找不到(至少从我对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”如何精确引用对象方面,我很麻烦。

  1. 对于第一个console.log,我知道它是在'xhr'上下文中调用的

  2. 对于IIFE中的下一个,以及在setTimeout中调用的最后一个,我不了解为什么它会产生Window对象并在全局范围内显示?从我阅读代码的方式来看,所有“ this”都指向xhr对象

谢谢

0 个答案:

没有答案