JavaScript預(yù)編譯

JavaScript預(yù)編譯四部曲:

  1. 創(chuàng)建AO(Activation Object)對(duì)象;
  2. 找形參和變量申明,將變量和形參名作為AO對(duì)象的屬性名,值為undefined;
  3. 將實(shí)參值和形參值相統(tǒng)一;
  4. 在函數(shù)體里面找函數(shù)申明,值賦予函數(shù)體。

這樣說比較難理解,我們來看個(gè)例子:

    function fn (a) {
      console.log(a)
      var a = 123
      console.log(a)
      function a () {}
      console.log(a)
      var b = function () {}
      console.log(b)
      function d () {}
    }

    fn(1)

第一步,創(chuàng)建AO對(duì)象:

AO:  {}

第二步,找形參和變量申明,將變量和形參名作為AO對(duì)象的屬性名,值為undefined:

image.png

根據(jù)上圖可得AO對(duì)象為:

AO: {
  a: undefined,
  b: undefined
}

第三部,將實(shí)參值和形參值相統(tǒng)一
例子中函數(shù)只有a一個(gè)形參,AO對(duì)象為

AO: {
  a: 1,
  b: undefined
}

第四部,在函數(shù)體里面找函數(shù)申明,值賦予函數(shù)體。
例子中函數(shù)申明如下圖:

image.png

如果函數(shù)申明的函數(shù)名和AO對(duì)象的屬性名相同,那么會(huì)覆蓋掉的AO原來的屬性值
AO對(duì)象的a屬性重復(fù)了,從而被覆蓋。故生成的AO對(duì)象為:

AO: {
 a: function a () {}, //這里a被覆蓋了
 b: undefined,
 d: function d () {}
}

最后來看運(yùn)行結(jié)果:

    function fn (a) {
      // AO: { a: function a () {} }
      console.log(a) // function a () {}
      var a = 123  // 這里將AO的值改變成123 AO: {a: 123} 
      console.log(a) // 123
      function a () {}
      console.log(a) // 123
      var b = function () {} 
      console.log(b) // function () {}
      function d () {}
    }

    fn(1)
?著作權(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)容

  • js運(yùn)行三部曲 語(yǔ)法分析 預(yù)編譯 解釋執(zhí)行 預(yù)編譯前奏 imply global 暗示全局變量, 即任何變量, 如...
    劉翾閱讀 613評(píng)論 0 1
  • 大家要明白,這個(gè)預(yù)編譯和傳統(tǒng)的編譯是不一樣的(可以理解js預(yù)編譯為特殊的編譯過程)JavaScript是解釋型語(yǔ)言...
    pengtoxen閱讀 323評(píng)論 0 0
  • 老樣子,先看下面的函數(shù) function fn(a){ console.log(a) var a = 123 co...
    esbook閱讀 140評(píng)論 0 0
  • 預(yù)編譯前奏 變量聲明提升通過var定義(聲明)的變量,在定義語(yǔ)句之前就可以訪問到值:undefined 函數(shù)聲明提...
    Lnevan閱讀 277評(píng)論 0 0
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂有人憂愁,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,898評(píng)論 28 54

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