为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

萧十郎 2018-09-18 09:10:52
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>
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

d.addEventListener('click',function(){

    a();//a打印的this是window

    你这么调用a不就相当于window.a(),this肯定是window啊

    console.log(this);//打印的是d对应的button元素

    这个this和当前dom元素绑定的处理函数有关,应该是addEventListener方法绑定事件的时候给callback函数的this绑定d元素吧。这个你可以查查资料是不是。

    

    var self=this;//保存this

    //为什么内部创建的函数this指向window

    (function(){

        console.log(self);

        这里self是你这个匿名函数的父作用域的self,就是父作用域的this,和上一句一样。

        console.log(this);//这里的this指向window

        

        这个匿名函数不就和a函数一样吗?

        换种写法:

        

        function test(){

            console.log(this);

        }

        test() === window.test();

    })();

});


查看完整回答
反对 回复 2018-10-01
  • 1 回答
  • 0 关注
  • 1185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信