躍然一笑
2018-08-02 18:33:59
function foo() { foo.a=function(){ console.log(1) } this.a=function(){ console.log(2) } a=function () { console.log(3) } var a = function(){ console.log(4) } } foo.a=function(){ console.log(6) } var obj = new foo(); foo.a() //為什么是1 不是直接調(diào)用嗎?
2 回答

qq_花開(kāi)花謝_0
TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊
js的執(zhí)行順序function foo() {}
定義全局變量foofoo.a = function(){}
給全局變量foo的a屬性賦值var obj = new foo();
構(gòu)造函數(shù)調(diào)用foo
進(jìn)入foo
函數(shù):foo.a=function(){}
給全局變量foo的a屬性覆蓋操作this.a=function(){}
因?yàn)橛昧薾ew關(guān)鍵字 this指向obj所以這句話是obj.a=...
下面兩句要一起看a = function(){}
本來(lái)這句沒(méi)有var是默認(rèn)全局變量var a = function(){}
但是這一句用了var導(dǎo)致變量聲明提前所以上面一句的a也變成了局部變量這一句覆蓋了a
所以歸根結(jié)底foo.a
只執(zhí)行了兩次操作
添加回答
舉報(bào)
0/150
提交
取消