xiaoxiaomingming
2016-03-03 16:10:58
var a=1;??? function b(){??????? a =10;??????? return ;?????? //function a(){}??? }??? b();??? alert(a);以上alert 10去掉注釋??? var a=1;??? function b(){??????? a =10;??????? return ;?????? function a(){}??? }??? b();??? alert(a);就alert 1????為什么呢?
1 回答

holy_night
TA貢獻(xiàn)5條經(jīng)驗(yàn) 獲得超0個(gè)贊
經(jīng)過(guò)chrome調(diào)試下發(fā)現(xiàn)代碼運(yùn)行原理應(yīng)該是這樣
當(dāng)執(zhí)行b()時(shí)進(jìn)入函數(shù)b的作用域,然后當(dāng)執(zhí)行代碼“a=10;”之前a就已經(jīng)是function了,然后執(zhí)行a=10;只不過(guò)是把function a 賦值為10;跟外部a一點(diǎn)關(guān)系都沒(méi)有,所以實(shí)際代碼簡(jiǎn)化如下:
? ? ?
?????var a=1;
? ? function b(){
? ? ? ? function a(){}
? ? ? ? a =10;
? ? ? ? return ;
? ? }
? ? b();
? ? alert(a);
?要注意函數(shù)聲明是提前讀取的不是走到最后才聲明出函數(shù)a!
添加回答
舉報(bào)
0/150
提交
取消