久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

完全掌握J(rèn)avaScript預(yù)編譯過程

本篇文章給大家?guī)砹岁P(guān)于javascript中預(yù)編譯的相關(guān)知識,其中主要通過示例來介紹預(yù)編譯的相關(guān)問題,希望對大家有幫助。

完全掌握J(rèn)avaScript預(yù)編譯過程

階段(三個)

  1. 詞法語法分析:詞法語法分析就是檢查JavaScript代碼是否有一些低級的語法錯誤
  2. 預(yù)編譯:本文主講
  3. 執(zhí)行代碼:執(zhí)行代碼就是js引擎解析代碼,解析一行執(zhí)行一行

這章主要講預(yù)編譯過程

預(yù)編譯過程

預(yù)編譯也分為2個時間點:

  1. 第一個是在JavaScript代碼執(zhí)行之前
  2. 第二個是在函數(shù)執(zhí)行之前。

但是JavaScript代碼之前,之前的預(yù)編譯只發(fā)生一次,函數(shù)執(zhí)行之前的預(yù)編譯是多次的。

1. JavaScript代碼執(zhí)行之前的預(yù)編譯

  1. JavaScript代碼執(zhí)行之前,首先會創(chuàng)建一個全局對象,可以理解為window對象,也可以理解為GOGlobal Object)對象,我們是看不到的(無法打印)
  2. 然后將所有聲明的全局變量未使用varlet聲明的變量放到GO對象中,并且賦值為undefined(聯(lián)想到“變量提升”)
  3. 分析**函數(shù)聲明:**然后再將所有的函數(shù)聲明也放到GO對象中,并且賦值為函數(shù)自身的函數(shù)體(函數(shù)名為屬性名,值為函數(shù)體,如果函數(shù)名和變量名相同,則無情覆蓋)

案例說明

<script>     var a = 1;     console.log(a);     console.log(b);     var b = 10;     function fun (a) {         console.log(b);         var a = b = 2;         var c = 123;         console.log(a);         console.log(b);     }     var a2 = 20     fun(1);   </script>

結(jié)合上面說的步驟:

  1. 首先,<script></script>中的代碼執(zhí)行之前會創(chuàng)建一個GO對象(window對象)

    GO = { 	//自帶的屬性都不寫 }
  2. 將所有聲明的全局變量、未使用varlet聲明的變量放到GO對象中,并且賦值為undefined

    GO = { 	a : undefined, 	b : undefined, 	a2 : undefined }
  3. 分析函數(shù)聲明,函數(shù)名為屬性名,值為函數(shù)體,如果函數(shù)名和變量名相同,則無情覆蓋

    GO = { 	a : undefined, 	b : undefined, 	a2 : undefined, 	function fun (a) {     var a = b = 2;     var c = 123;   } }
  4. 此時完成了js代碼執(zhí)行之前的預(yù)編譯過程,開始執(zhí)行js代碼,首先是給a進(jìn)行賦值為1,在GO對象里邊也會進(jìn)行對應(yīng)的改變:

    GO = { 	a : 1, 	b : undefined, 	a2 : undefined, 	function fun (a) {     var a = b = 2;     var c = 123;   } }
  5. 然后打印a,此時會在GO對象上去找變量a,然后此時的a的值為1,所以console.log(a) 是等于1的。接著打印b,也會去GO對象上找,找到了b的值為undefined,所以console.log(b)是等于undefined

  6. 接著執(zhí)行到賦值語句:b = 10; 此時GO對象里b的值變成了10

    GO = { 	a : 1, 	b : 10, 	a2 : undefined, 	function fun (a) { 		var a = b = 2; 		var c = 123; 	} }
  7. 接著下一行代碼是一個**fun函數(shù),此時不會去執(zhí)行該函數(shù)**,因為在前面的預(yù)編譯過程中實際上是被放到了代碼的最前端,就是傳說中的聲明提前,所以忽略掉了。接著給a2進(jìn)行賦值操作a2 = 20,GO對象也發(fā)生變化:

    GO = { 	a : 1, 	b : 10, 	a2 : 20, 	function fun (a) { 		var a = b = 2; 		var c = 123; 	} }
  8. 接著是執(zhí)行fun函數(shù),如上面說到的另外一個時間點發(fā)生的預(yù)編譯,就是執(zhí)行函數(shù)之前,現(xiàn)在就來說一下函數(shù)執(zhí)行前的預(yù)編譯是怎么樣的。

2. 函數(shù)執(zhí)行前的預(yù)編譯

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

    1. 生成AO對象:函數(shù)執(zhí)行前的一瞬間,生成AO活動對象
    2. 分析生成AO屬性:查找形參變量聲明放到AO對象,賦值為undefined
    3. 分析函數(shù)聲明:查找函數(shù)聲明放到AO對象并賦值為函數(shù)體。函數(shù)名為屬性名,值為函數(shù)體;

    如果遇到AO對象上屬性同名,則無情覆蓋

  2. 逐行執(zhí)行。

案例說明

拿的是上文中的代碼示例。

  1. 第一步創(chuàng)建AO對象

    AO{  }
  2. 查找形參變量聲明放到AO對象并賦值為undefined

    注意:fun函數(shù)里邊的b是未經(jīng)var聲明的,所以是全局變量,不會被放在fun的AO上。

    AO{ 	a: undefined,//形參a與局部變量a同名 	c: undefined }
  3. 實參賦值到形參

    AO{ 	a: 1, 	c: undefined, }
  4. 查找函數(shù)聲明放到AO對象并賦值為函數(shù)體,fun函數(shù)沒有函數(shù)聲明,所以忽略這一步。

  5. 函數(shù)執(zhí)行之前的預(yù)編譯完成,開始執(zhí)行語句

  6. 執(zhí)行代碼

    1. 首先執(zhí)行打印變量b,而此時fun的AO里邊并沒有變量b,所以會去GO對象里邊找,此時的GO對象b的值為10,所以第一行代碼打印出10;

    2. 第二行代碼首先要看的是b = 2,然后GO對象里邊b的值就被改為2了。

      GO = { 	a : 1, 	b : 10, 	a2 : 20, 	function fun (a) { 		var a = b = 2; 		var c = 123; 	} }
    3. 然后b再賦值給a,變量a是屬于局部變量a,所以fun的AO對象里邊a的值被改為2。

      AO{ 	a: 2, 	c: undefined, }
    4. 接著下一個賦值語句是c = 123,所以AO對象中c的值被改為了123

      AO{ 	a: 2, 	c: 123, }
    5. 此時再執(zhí)行console.log(a)的值就是AO對象里邊a的值 2;執(zhí)行console.log(b)的值就是GO對象b的值 2,至此函數(shù)fun執(zhí)行完畢,緊跟著fun的AO也會被銷毀

  7. 綜上所述,依次打印出來的值為:1,undefined,10,2,2

完全掌握J(rèn)avaScript預(yù)編譯過程

總結(jié)

預(yù)編譯兩個小規(guī)則:

  1. 函數(shù)聲明整體提升(無論函數(shù)調(diào)用和聲明的位置是前是后,系統(tǒng)總會把函數(shù)聲明移到調(diào)用前面)
  2. 變量聲明提升(無論變量調(diào)用和聲明的位置是前是后,系統(tǒng)總會把聲明移到調(diào)用前,注意僅僅只是聲明,所以值是undefined

預(yù)編譯前奏

  1. imply global(暗示全局變量-專業(yè)術(shù)語) 即:任何變量,如果未經(jīng)聲明就賦值,則此變量就位全局變量所有。(全局域就是window,這里再一次說明了JavaScript是基于對象的語言,base on window)
  2. 一切聲明的全局變量,全是window的屬性;var a=12;等同于window.a = 12;(會造成window這個對象特別臃腫)
  3. 函數(shù)預(yù)編譯發(fā)生在函數(shù)執(zhí)行前一刻(懶加載機(jī)制)

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
中文久久精品| 亚洲色图网站| 日韩av在线播放中文字幕| 免费人成在线不卡| 999精品色在线播放| 精品欧美一区二区三区在线观看| 日韩一区二区三区免费播放| 日韩欧美少妇| 亚洲女同一区| 免费看精品久久片| 日韩不卡免费视频| 国产精品一区亚洲| 精品久久亚洲| 日韩欧美自拍| 亚洲欧美高清| 欧美日韩亚洲一区在线观看| 久久亚洲黄色| 精精国产xxxx视频在线野外| 欧美精品一区二区三区精品| 免费视频亚洲| 亚洲人www| 国产日韩欧美高清免费| 精品国产不卡一区二区| 色婷婷久久久| 日韩中文欧美在线| 国产精品第十页| 成人看片网站| 日韩精品一二三四| 国产欧美三级| 日韩欧美一区二区三区免费观看| 国产精品婷婷| 国产精品乱战久久久| 久久久久久久欧美精品| 精品资源在线| 久久精品国产亚洲夜色av网站| 伊人久久亚洲热| 久久aⅴ国产紧身牛仔裤| 欧美一级一区| 久久久男人天堂| 日韩精品一二三四| 国产欧美一区| 亚洲午夜久久久久久尤物| 亚洲91网站| 日韩综合一区| 亚洲欧美日韩视频二区| 国产精品xxx在线观看| 亚洲视频综合| 国产欧美久久一区二区三区| 三级精品视频| 欧美在线观看天堂一区二区三区| 亚洲一级少妇| 日韩中文欧美在线| 久久精品女人| 蜜臀av性久久久久蜜臀aⅴ四虎| 麻豆国产精品视频| 三级一区在线视频先锋| 国产一区二区三区天码| 亚洲综合国产| 色婷婷亚洲mv天堂mv在影片| 亚洲一区二区小说| 福利视频一区| 亚洲精品一级| 久久久久久久久久久9不雅视频| 日韩美女精品| 亚洲午夜精品久久久久久app| 国产日韩一区二区三区在线| 快播电影网址老女人久久| 日本国产一区| 欧美日韩三区| 欧美好骚综合网| 日本一区免费网站| 五月天久久久| 国产一区国产二区国产三区 | 欧美国产精品| 免费在线视频一区| 亚洲电影有码| 国产精品一线| 中文视频一区| 国产在线不卡| 国产一区丝袜| 亚洲一二三区视频| 亚洲女同一区| 九九精品调教| 精品国产一区二| 国产日本精品| 亚洲一区二区日韩| 亚洲精品123区| 91tv亚洲精品香蕉国产一区| 久久亚洲黄色| 国产精品一卡| 日本午夜精品| 最新亚洲国产| 日韩精品一级二级| 一区免费视频| 999精品一区| 精品国产网站| 欧美成人精品一级| 91福利精品在线观看| 鲁大师影院一区二区三区| 亚洲一级影院| 久久久精品五月天| 91看片一区| 四虎8848精品成人免费网站| 欧美黑人做爰爽爽爽| 久久国际精品| 欧美亚洲福利| 欧美另类中文字幕| 欧美私人啪啪vps| 国产一卡不卡| 国产欧美久久一区二区三区| 亚洲综合婷婷| 一区二区三区午夜视频| 鲁大师成人一区二区三区| 在线看片不卡| 激情丁香综合| 一级欧洲+日本+国产| 欧美va天堂在线| 亚洲精品小说| 99综合视频| 丝袜美腿亚洲一区| 亚洲视频二区| 日韩高清在线不卡| 欧美精品三级在线| 国产福利资源一区| 国产在线视频欧美一区| 久久精品资源| 麻豆视频观看网址久久| 精品深夜福利视频| 欧美日韩国产观看视频| 久久久久国产精品一区二区| 激情欧美国产欧美| 国产午夜久久| 日韩三级精品| 国产精品乱战久久久| 成人在线免费观看91| 欧美aa在线观看| 怡红院精品视频在线观看极品| 亚洲在线免费| 日韩av网站免费在线| 国产精品hd| 精品午夜久久| 亚洲成人不卡| 国产亚洲高清视频| 日韩激情网站| 精品国产黄a∨片高清在线| 欧洲一区二区三区精品| 合欧美一区二区三区| 中文字幕中文字幕精品| 久久国产欧美日韩精品| 精品视频黄色| 亚洲网站视频| 亚洲tv在线| 精品中国亚洲| 欧美综合另类| 亚洲人成网77777色在线播放 | 国产日韩欧美三区| 国产不卡av一区二区| 久久精品亚洲人成影院 | 激情久久一区二区| 精品中文一区| 日本亚州欧洲精品不卡| 国产精品玖玖玖在线资源| 国产传媒av在线| 欧美二区视频| 日韩av成人高清| 日韩av免费大片| 天堂网在线观看国产精品| 日韩美女精品| 午夜精品成人av| 亚洲日产国产精品| 精品国产不卡一区二区| 欧美另类专区| 国产精品2区| 欧美另类专区| 久久亚洲黄色| 男女男精品网站| 狠狠久久伊人| 蜜臀久久久99精品久久久久久| 欧美精品中文| 欧美一级精品| 国产精品地址| 久久aⅴ国产紧身牛仔裤| 精品亚洲免a| 一区二区日韩免费看| 中文字幕在线看片| 日本中文字幕一区二区| 深夜视频一区二区| 欧美日韩xxxx| 自拍日韩欧美| 国产伊人久久| 婷婷综合福利| 丝袜美腿诱惑一区二区三区| 国产亚洲久久| 亚洲国产专区| 免费一级欧美片在线观看网站 | 欧美亚洲tv| 99国产精品久久久久久久成人热| 久久男人av| 日本在线视频一区二区| 欧美午夜精彩|