javascript預(yù)編譯機制

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

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

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

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

1.1. 函數(shù)執(zhí)行前的一瞬間,生成AO活動對象
1.2 分析參數(shù),形參作為對象的屬性名,實參作為對象的屬性值
1.3. 分析變量聲明,變量名為屬性名,值為undefined,如果遇到AO對象上屬性同名,不去做任何改變,
注意?。?!
如果變量名與形參名相同,變量不會覆蓋形參,是以形參為準(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對象上屬性同名,則無情覆蓋
  1. 逐行執(zhí)行

總之:不管全局還是局部,都是先預(yù)解析聲明變量,其次是聲明函數(shù)。
需注意的就是:
當(dāng)解析函數(shù)聲明時與變量同名則無情覆蓋。
函數(shù)內(nèi)的形參與變量同名,以形參為準(zhǔn);
賦值函數(shù)(即變量=一個匿名函數(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)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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

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