鍍金池/ 問(wèn)答/網(wǎng)絡(luò)安全  HTML/ 調(diào)用foo函數(shù),返回obj.c。那么為什么會(huì)沒(méi)有結(jié)果類?

調(diào)用foo函數(shù),返回obj.c。那么為什么會(huì)沒(méi)有結(jié)果類?

clipboard.png

'use strict';
var a = 20;
function foo () {
    var a = 1;
    var obj = {
        a: 10,
        c: this.a + 20,  
        fn: function () {
            return this.a;
        }
    }
    return obj.c;

}
console.log(foo());    // ?
console.log(window.foo());  // ?

是不是因?yàn)檎{(diào)用foo函數(shù)的時(shí)候,返回obj.c。而obj.c是this.a+20.
此時(shí)的this是指向undefined,(因?yàn)樵趪?yán)格模式下)所以沒(méi)有結(jié)果嗎?
如果沒(méi)有用嚴(yán)格模式的話,這個(gè)this是指向window嗎?怎么指向window有點(diǎn)模糊?
請(qǐng)各位指教.
Uncaught TypeError: Cannot read property 'a' of undefined at foo (test.html:18) at test.html:26

回答
編輯回答
替身

嗯吶,嚴(yán)格模式下指向undefined。非嚴(yán)格模式下指向window,至于為什么指向window就是個(gè)老生常談的問(wèn)題了。

this的指向是運(yùn)行時(shí)綁定。何為運(yùn)行時(shí),指的就是函數(shù)的調(diào)用點(diǎn)在哪里。很顯然,foo()的調(diào)用點(diǎn)在全局,所以this便指向全局對(duì)象或者undefined。

可供參考

2018年6月21日 04:08