关于js this指向的一个问题

var a={
    name:"xuxu",
    getname:function(){
        console.log(this);
        var b=function(){
            console.log(this);
        }
        b();
        console.log(Window);
    }
}
a.getname();

以上代码中,getname中的this是指向a的我能理解,但是它里面的b函数中的this指向window是怎么理解呢,为什么b函数是由window调用呢
当函数不作为对象的属性被调用时,也就是我们常说的普通函数方式,此时的this总是指向全局对象 也就是说一个对象的属性是一个函数,如果这个函数由这个对象调用,那么这个函数里面的this是指向这个对象的,但是这个函数内部的函数,是按上面这句话执行的,因为b函数不是直接当做a的属性调用的,它是普通调用因此默认指向window

阅读 2.1k
3 个回答

函数发生嵌套的时候,this 是不会自动传递的,除非你手动传递,常见的:

var a={
    name:"xuxu",
    getname:function(){
        console.log(this);
        var self=this;
        var b=function(){
            console.log(self);//对象 a
        }
        b();
        console.log(Window);
    }
}
a.getname();

当然也可以通过 apply,call 传递 this,等你遇到了再去查查,先留个印象;

参考这个问题下的回答。
只与调用时方式有关,与所处位置无关。

可以参考《你不知道的JS》里面有js中this的几种绑定用法,b()中this绑定在了全局window上

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题