javascript預(yù)編譯機(jī)制

預(yù)編譯的兩種情況
全局:

1.全局 直接是script標(biāo)簽中的代碼,不包括函數(shù)執(zhí)行
執(zhí)行前:
1.首先生成一個(gè)GO(global object)對(duì)象,看不到,但是可以模擬出來用來分析
2.分析變量聲明,變量名為屬性名,值為undefined
3.分析函數(shù)聲明,函數(shù)名為屬性名,值為函數(shù)體,如果函數(shù)名和變量名相同,則無情覆蓋

函數(shù)內(nèi)部(局部):

  1. 函數(shù)調(diào)用,也是會(huì)生成自己的作用域(AO:active object),AO活動(dòng)對(duì)象. 函數(shù)調(diào)用時(shí)候,執(zhí)行前的一瞬間產(chǎn)生的,如果有多個(gè)函數(shù)的調(diào)用,會(huì)產(chǎn)生多個(gè)AO

1.1. 函數(shù)執(zhí)行前的一瞬間,生成AO活動(dòng)對(duì)象
1.2 分析參數(shù),形參作為對(duì)象的屬性名,實(shí)參作為對(duì)象的屬性值
1.3. 分析變量聲明,變量名為屬性名,值為undefined,如果遇到AO對(duì)象上屬性同名,不去做任何改變,
注意?。?!
如果變量名與形參名相同,變量不會(huì)覆蓋形參,是以形參為準(zhǔn)。
例1

console.log(test); ---->   **輸出函數(shù)體**
 function test(test){
     console.log('test='+test); ----> **輸出undefined**
      var test = 123;
 }
test();

例2

console.log(test); ---->   輸出函數(shù)體
 function test(test){
     console.log('test='+test); ----> *輸出10*
      var test = 123;
 }
test(10);
1.4 分析函數(shù)聲明,函數(shù)名為屬性名,值為函數(shù)體,如果遇到AO對(duì)象上屬性同名,則無情覆蓋
  1. 逐行執(zhí)行

總之:不管全局還是局部,都是先預(yù)解析聲明變量,其次是聲明函數(shù)。
需注意的就是:
當(dāng)解析函數(shù)聲明時(shí)與變量同名則無情覆蓋。
函數(shù)內(nèi)的形參與變量同名,以形參為準(zhǔn);
賦值函數(shù)(即變量=一個(gè)匿名函數(shù))是屬于變量聲明;

綜合練習(xí)例子

<script type="text/javascript">
     console.log(test);
     function test(test){
         console.log(test);
         var test = 123;
         console.log(test);
         function test(){ 
         }
         console.log(test);
         var test = function(){}
         console.log(test);
     }
     test(10);
     var test = 456
     console.log(test);
 </script>

參考
https://www.cnblogs.com/xuxiaoyu/p/10133373.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 函數(shù)和對(duì)象 1、函數(shù) 1.1 函數(shù)概述 函數(shù)對(duì)于任何一門語(yǔ)言來說都是核心的概念。通過函數(shù)可以封裝任意多條語(yǔ)句,而且...
    道無虛閱讀 4,968評(píng)論 0 5
  • 來源:仗劍走天涯! 關(guān)于javascript的作用域的一些總結(jié),主要參考以上文章,加上自己的整理的理解。 近日對(duì)j...
    Michael_林閱讀 1,028評(píng)論 0 1
  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,884評(píng)論 0 3
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,697評(píng)論 1 32
  • 第一章 錯(cuò)誤處理: 錯(cuò)誤: 程序運(yùn)行過程中,導(dǎo)致程序無法正常執(zhí)行的現(xiàn)象(即bug) 現(xiàn)象: 程序一旦出錯(cuò),默認(rèn)會(huì)報(bào)...
    fastwe閱讀 1,272評(píng)論 0 1

友情鏈接更多精彩內(nèi)容