js的this 指向问题:为什么点击按钮执行函数内部创建的函数this指向的事window?

his一直有点晕,今天写了一个测试,但是还是不理解,求高手给个通俗易懂的简答: 
以下代码,为什么点击按钮执行函数内部创建的函数this指向的事window?

(function(){
            console.log(self);
            console.log(this);//这里的this指向window
        })();

    <body><button id="di" >ssss</button><script type="text/javascript">var d=document.getElementById('di');    function a(){
        name='111'
        console.log(this);
    }

    d.addEventListener('click',function(){
        a();//a打印的this是window
        console.log(this);//打印的是d对应的button元素
        var self=this;、//保存this
        //为什么内部创建的函数this指向window
        (function(){            console.log(self);            console.log(this);//这里的this指向window
        })();
    });</script></body></html>


萧十郎
浏览 1186回答 1
1回答

潇潇雨雨

d.addEventListener('click',function(){&nbsp; &nbsp; a();//a打印的this是window&nbsp; &nbsp; 你这么调用a不就相当于window.a(),this肯定是window啊&nbsp; &nbsp; console.log(this);//打印的是d对应的button元素&nbsp; &nbsp; 这个this和当前dom元素绑定的处理函数有关,应该是addEventListener方法绑定事件的时候给callback函数的this绑定d元素吧。这个你可以查查资料是不是。&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; var self=this;//保存this&nbsp; &nbsp; //为什么内部创建的函数this指向window&nbsp; &nbsp; (function(){&nbsp; &nbsp; &nbsp; &nbsp; console.log(self);&nbsp; &nbsp; &nbsp; &nbsp; 这里self是你这个匿名函数的父作用域的self,就是父作用域的this,和上一句一样。&nbsp; &nbsp; &nbsp; &nbsp; console.log(this);//这里的this指向window&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; 这个匿名函数不就和a函数一样吗?&nbsp; &nbsp; &nbsp; &nbsp; 换种写法:&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; function test(){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.log(this);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; test() === window.test();&nbsp; &nbsp; })();});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript