在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ this關(guān)鍵字問(wèn)題

this關(guān)鍵字問(wèn)題

如圖所示,這里調(diào)用obj.getAge()后為什么this會(huì)指向windows/undefined,不是obj調(diào)用了它嗎,this不應(yīng)該是指向obj嗎??
clipboard.png

對(duì)比:像這里person。showName()的this就是指向person的啊,不是誰(shuí)調(diào)用this就指向誰(shuí)嗎
clipboard.png

回答
編輯回答
生性

因?yàn)閒n是個(gè)匿名函數(shù)

舉個(gè)簡(jiǎn)單例子

    var obj = {
        fn1: function() {
            console.log(this);//此處輸出obj本身
            var noNamed = function() {
                console.log(this);//此處輸出windowd對(duì)象
            };
            return noNamed();
        }
    };
    obj.fn1();

以上,你的var fn=function(){};return fn()本質(zhì)上就是個(gè)直接調(diào)用的匿名函數(shù)閉包 return function(){}
你只是將這個(gè)匿名函數(shù)賦值給fn了,并不能改變他沒(méi)函數(shù)名的本質(zhì)

結(jié)論:只要是匿名函數(shù),this就指向window全局對(duì)象,例如:

function foo() {
    var fn = setTimeout(function() { //我是匿名函數(shù)
        console.log(`setTimeout的this不會(huì)隨foo改變:${this.age}`); 
    }, 0);
}
foo.call({
    age: '1000'
});//輸出undefined
2017年4月30日 07:30
編輯回答
陌如玉

this 不懂

2017年12月11日 04:03
編輯回答
熟稔

var name = 'XL';
var person = {

name: 'xl',
showName: function() {console.info(this.name)}

}

person.showName();
// 這里showName調(diào)用位置是person上下文,所以作用的this被綁定到person上
var showNameA = person.showName;
// 這里的showNameA類似于函數(shù)別名,showNameA是person.showName的引用,showNameA調(diào)用位置依舊是window.
//this的綁定是與它調(diào)用位置有關(guān)的

var obj = {

birth: 1990,
getAge: function() {
    var b = this.birth;
    var fn = function() { console.info(this)}
}
return fn;

}

你的那個(gè)obj中的getAge中涉及到閉包,其實(shí)可以理解為返回一個(gè)函數(shù)fn,obj.getAge()完成后繼續(xù)執(zhí)行fn,此時(shí)的調(diào)用位置是在Window環(huán)境下,所以fn中的this指向window

2018年4月2日 14:48