激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務(wù)器之家 - 編程語(yǔ)言 - JavaScript - js教程 - 一起來(lái)了解一下JavaScript的預(yù)編譯(小結(jié))

一起來(lái)了解一下JavaScript的預(yù)編譯(小結(jié))

2022-01-25 15:59前端布吉島 js教程

這篇文章主要介紹了一起來(lái)了解一下JavaScript的預(yù)編譯(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

JS運(yùn)行三部曲

js運(yùn)行代碼共分三步

  • 語(yǔ)法分析
  • 預(yù)編譯
  • 解釋執(zhí)行

JavaScript代碼在運(yùn)行時(shí),首先會(huì)進(jìn)行語(yǔ)法分析,通篇檢查代碼是否存在低級(jí)錯(cuò)誤,然后進(jìn)行預(yù)編譯,整理內(nèi)部的一個(gè)邏輯,最后再開(kāi)始一行一行的執(zhí)行代碼

語(yǔ)法分析

代碼在執(zhí)行之前,系統(tǒng)會(huì)通篇掃描一遍,檢查代碼有沒(méi)有低級(jí)的語(yǔ)法錯(cuò)誤,比如少寫(xiě)個(gè)大括號(hào)。

預(yù)編譯

預(yù)編譯前奏

預(yù)編譯發(fā)生在函數(shù)執(zhí)行的前一刻。變量未經(jīng)聲明就賦值,此變量為全局對(duì)象所有

a = 3

var b = c = 4

一切聲明的全局變量,全是window的屬性

var a = 1 ===> window.a = 1

預(yù)編譯四部曲

  1. 創(chuàng)建AO(Activation Object)對(duì)象(里面存儲(chǔ)的是函數(shù)內(nèi)部的局部變量)
  2. 找形參和變量聲明,將變量和形參名做為AO屬性名,值為undefined
  3. 將實(shí)參和形參統(tǒng)一
  4. 在函數(shù)體里面找函數(shù)聲明,值賦予函數(shù)體

用一個(gè)例子來(lái)說(shuō)明一下,也可以自己先給出一個(gè)答案,再繼續(xù)往下看

?
1
2
3
4
5
6
7
8
9
10
11
12
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() {}
 console.log(d)
}
fn(1);

第一步,創(chuàng)建AO(Activation Object)對(duì)象 {}第二步,找形參和變量聲明,將變量和形參名做為AO屬性名,值為undefined

?
1
2
3
4
{
 a: undefined,
 b: undefined,
}

第三步,將實(shí)參和形參統(tǒng)一

?
1
2
3
4
{
 a: 1,
 b: undefined,
}

第四步,找函數(shù)聲明,值賦予函數(shù)體

?
1
2
3
4
5
{
 a: function a() {},
 b: undefined,
 d: function d() {}
}

所以在函數(shù)fn執(zhí)行的前一刻,a、b、d的值如上所示

所以fn(1)執(zhí)行的結(jié)果為

// ƒ a() {}
// 123
// 123
// ƒ () {}
// ƒ d() {}

在全局作用域里,預(yù)編譯過(guò)程有些許不同

  • 創(chuàng)建GO(Global Object)對(duì)象(里面存儲(chǔ)的是函數(shù)內(nèi)部的全局變量)GO === window
  • 找形參和變量聲明,將變量和形參名做為GO屬性名,值為undefined
  • 在函數(shù)體里面找函數(shù)聲明,值賦予函數(shù)體

解釋執(zhí)行

一行一行的執(zhí)行代碼

實(shí)踐題

這里有幾個(gè)例題,有興趣的可以看一下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function test(a, b) {
 console.log(a);
 console.log(b);
 var b = 234;
 console.log(b);
 a = 123;
 console.log(a);
 function a() {}
 var a;
 b = 234;
 var b = function() {};
 console.log(a);
 console.log(b);
}
test(1);
?
1
2
3
4
5
6
7
8
9
global = 100;
function fn() {
 console.log(global);
 global = 200;
 console.log(global);
 var global = 300;
}
fn();
var global;
?
1
2
3
4
5
6
7
8
9
10
11
12
function test() {
 console.log(b);
 if (a) {
  var b = 100;
 }
 c = 234;
 console.log(c);
}
var a;
test();
a = 10;
console.log(c);

總結(jié)

多數(shù)情況下,我們都是采用下面的這種方式來(lái)處理預(yù)編譯的一個(gè)過(guò)程

  • 函數(shù)聲明,整體提升
  • 變量聲明,聲明提升

若是遇見(jiàn)復(fù)雜的情況就只能采用最原始的方式來(lái)解決問(wèn)題了

到此這篇關(guān)于一起來(lái)了解一下JavaScript的預(yù)編譯(小結(jié))的文章就介紹到這了,更多相關(guān)JavaScript 預(yù)編譯內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://juejin.cn/post/6933756598678454280

延伸 · 閱讀

精彩推薦
  • js教程JavaScript this關(guān)鍵字的深入詳解

    JavaScript this關(guān)鍵字的深入詳解

    這篇文章主要給大家介紹了關(guān)于JavaScript this關(guān)鍵字的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要...

    JAVA_樸先生9062021-12-31
  • js教程js實(shí)現(xiàn)有趣的倒計(jì)時(shí)效果

    js實(shí)現(xiàn)有趣的倒計(jì)時(shí)效果

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)有趣的倒計(jì)時(shí)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    搬磚大法4462022-01-04
  • js教程詳解微信小程序「渲染層網(wǎng)絡(luò)層錯(cuò)誤」的解決方法

    詳解微信小程序「渲染層網(wǎng)絡(luò)層錯(cuò)誤」的解決方法

    這篇文章主要介紹了詳解微信小程序「渲染層網(wǎng)絡(luò)層錯(cuò)誤」的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)...

    石璞東 | haha6312021-12-27
  • js教程微信小程序?qū)崿F(xiàn)登錄注冊(cè)功能

    微信小程序?qū)崿F(xiàn)登錄注冊(cè)功能

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)登錄注冊(cè)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    保護(hù)我方豆豆5402021-12-22
  • js教程javascript實(shí)現(xiàn)拼圖游戲

    javascript實(shí)現(xiàn)拼圖游戲

    這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)拼圖游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    過(guò)客塵煙4942022-01-12
  • js教程ES6的循環(huán)與可迭代對(duì)象示例詳解

    ES6的循環(huán)與可迭代對(duì)象示例詳解

    這篇文章主要給大家介紹了關(guān)于ES6的循環(huán)與可迭代對(duì)象的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,...

    瘋狂的技術(shù)宅11542022-01-12
  • js教程JavaScript canvas實(shí)現(xiàn)跟隨鼠標(biāo)移動(dòng)小球

    JavaScript canvas實(shí)現(xiàn)跟隨鼠標(biāo)移動(dòng)小球

    這篇文章主要為大家詳細(xì)介紹了JavaScript canvas實(shí)現(xiàn)跟隨鼠標(biāo)移動(dòng)小球,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一...

    清靜清源10412022-01-20
  • js教程JS實(shí)現(xiàn)選項(xiàng)卡插件的兩種寫(xiě)法(jQuery和class)

    JS實(shí)現(xiàn)選項(xiàng)卡插件的兩種寫(xiě)法(jQuery和class)

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)選項(xiàng)卡插件的兩種寫(xiě)法:jQuery和class,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參...

    南柯Seven12012021-12-22
主站蜘蛛池模板: 久久看免费视频 | 91青青| 国产精品久久久久久久久久三级 | 久久精品一二三区 | 国产午夜精品一区二区三区视频 | 黄色一级片在线免费观看 | 91精品国产综合久久男男 | 国产亚洲精品久久 | 成片免费观看视频大全 | 精品久久久久久久久久中文字幕 | 性欧美在线视频 | 久久精品片 | 91九色丨porny丨国产jk | www.av520| 婷婷中文字幕一区二区三区 | 日本一区二区不卡在线观看 | 九色com| a视频在线看 | 9丨九色丨国产 | 在线观看免费精品 | 鲁丝一区二区三区不属 | 国产精品一区免费在线观看 | 欧美激情精品久久久久 | 国外成人在线视频 | 51国产偷自视频区视频小蝌蚪 | 亚洲国产成人久久一区www妖精 | 国产日韩亚洲 | 国产亲子伦在线观看 | 99最新地址 | 又黄又爽免费无遮挡在线观看 | 999久久国产| av在线免费观看国产 | 中文字幕在线亚洲精品 | 亚洲精品aⅴ中文字幕乱码 欧美囗交 | 青热久思思 | 99ri精品| 久草在线免费资源站 | 国产高潮失禁喷水爽到抽搐视频 | 国产精品自拍av | 国产精品1区2区 | 看国产毛片 |