鍍金池/ 問答/Python  HTML/ 關(guān)于js this指向的一個(gè)問題

關(guān)于js this指向的一個(gè)問題

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函數(shù)中的this指向window是怎么理解呢,為什么b函數(shù)是由window調(diào)用呢
當(dāng)函數(shù)不作為對(duì)象的屬性被調(diào)用時(shí),也就是我們常說(shuō)的普通函數(shù)方式,此時(shí)的this總是指向全局對(duì)象 也就是說(shuō)一個(gè)對(duì)象的屬性是一個(gè)函數(shù),如果這個(gè)函數(shù)由這個(gè)對(duì)象調(diào)用,那么這個(gè)函數(shù)里面的this是指向這個(gè)對(duì)象的,但是這個(gè)函數(shù)內(nèi)部的函數(shù),是按上面這句話執(zhí)行的,因?yàn)閎函數(shù)不是直接當(dāng)做a的屬性調(diào)用的,它是普通調(diào)用因此默認(rèn)指向window

回答
編輯回答
幼梔

函數(shù)發(fā)生嵌套的時(shí)候,this 是不會(huì)自動(dòng)傳遞的,除非你手動(dòng)傳遞,常見的:

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

當(dāng)然也可以通過(guò) apply,call 傳遞 this,等你遇到了再去查查,先留個(gè)印象;

2017年8月4日 16:25
編輯回答
悶油瓶

參考這個(gè)問題下的回答。
只與調(diào)用時(shí)方式有關(guān),與所處位置無(wú)關(guān)。

2017年5月18日 04:17
編輯回答
老梗

可以參考《你不知道的JS》里面有js中this的幾種綁定用法,b()中this綁定在了全局window上

2018年6月23日 19:51