鍍金池/ 問答/HTML/ this關鍵字問題

this關鍵字問題

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

對比:像這里person。showName()的this就是指向person的啊,不是誰調用this就指向誰嗎
clipboard.png

回答
編輯回答
生性

因為fn是個匿名函數(shù)

舉個簡單例子

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

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

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

function foo() {
    var fn = setTimeout(function() { //我是匿名函數(shù)
        console.log(`setTimeout的this不會隨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調用位置是person上下文,所以作用的this被綁定到person上
var showNameA = person.showName;
// 這里的showNameA類似于函數(shù)別名,showNameA是person.showName的引用,showNameA調用位置依舊是window.
//this的綁定是與它調用位置有關的

var obj = {

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

}

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

2018年4月2日 14:48