国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - JavaScript - js教程 - 一起來了解一下JavaScript的預編譯(小結)

一起來了解一下JavaScript的預編譯(小結)

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

這篇文章主要介紹了一起來了解一下JavaScript的預編譯(小結),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

JS運行三部曲

js運行代碼共分三步

  • 語法分析
  • 預編譯
  • 解釋執行

JavaScript代碼在運行時,首先會進行語法分析,通篇檢查代碼是否存在低級錯誤,然后進行預編譯,整理內部的一個邏輯,最后再開始一行一行的執行代碼

語法分析

代碼在執行之前,系統會通篇掃描一遍,檢查代碼有沒有低級的語法錯誤,比如少寫個大括號。

預編譯

預編譯前奏

預編譯發生在函數執行的前一刻。變量未經聲明就賦值,此變量為全局對象所有

a = 3

var b = c = 4

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

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

預編譯四部曲

  1. 創建AO(Activation Object)對象(里面存儲的是函數內部的局部變量)
  2. 找形參和變量聲明,將變量和形參名做為AO屬性名,值為undefined
  3. 將實參和形參統一
  4. 在函數體里面找函數聲明,值賦予函數體

用一個例子來說明一下,也可以自己先給出一個答案,再繼續往下看

?
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);

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

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

第三步,將實參和形參統一

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

第四步,找函數聲明,值賦予函數體

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

所以在函數fn執行的前一刻,a、b、d的值如上所示

所以fn(1)執行的結果為

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

在全局作用域里,預編譯過程有些許不同

  • 創建GO(Global Object)對象(里面存儲的是函數內部的全局變量)GO === window
  • 找形參和變量聲明,將變量和形參名做為GO屬性名,值為undefined
  • 在函數體里面找函數聲明,值賦予函數體

解釋執行

一行一行的執行代碼

實踐題

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

?
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);

總結

多數情況下,我們都是采用下面的這種方式來處理預編譯的一個過程

  • 函數聲明,整體提升
  • 變量聲明,聲明提升

若是遇見復雜的情況就只能采用最原始的方式來解決問題了

到此這篇關于一起來了解一下JavaScript的預編譯(小結)的文章就介紹到這了,更多相關JavaScript 預編譯內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

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

延伸 · 閱讀

精彩推薦
  • js教程JavaScript this關鍵字的深入詳解

    JavaScript this關鍵字的深入詳解

    這篇文章主要給大家介紹了關于JavaScript this關鍵字的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要...

    JAVA_樸先生9062021-12-31
  • js教程js實現有趣的倒計時效果

    js實現有趣的倒計時效果

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

    搬磚大法4462022-01-04
  • js教程詳解微信小程序「渲染層網絡層錯誤」的解決方法

    詳解微信小程序「渲染層網絡層錯誤」的解決方法

    這篇文章主要介紹了詳解微信小程序「渲染層網絡層錯誤」的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價...

    石璞東 | haha6312021-12-27
  • js教程微信小程序實現登錄注冊功能

    微信小程序實現登錄注冊功能

    這篇文章主要介紹了微信小程序實現登錄注冊功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    保護我方豆豆5402021-12-22
  • js教程javascript實現拼圖游戲

    javascript實現拼圖游戲

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

    過客塵煙4942022-01-12
  • js教程ES6的循環與可迭代對象示例詳解

    ES6的循環與可迭代對象示例詳解

    這篇文章主要給大家介紹了關于ES6的循環與可迭代對象的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    瘋狂的技術宅11542022-01-12
  • js教程JavaScript canvas實現跟隨鼠標移動小球

    JavaScript canvas實現跟隨鼠標移動小球

    這篇文章主要為大家詳細介紹了JavaScript canvas實現跟隨鼠標移動小球,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

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

    JS實現選項卡插件的兩種寫法(jQuery和class)

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

    南柯Seven12012021-12-22
主站蜘蛛池模板: 日韩视频一区二区三区 | 中文精品在线 | 亚洲一区在线日韩在线深爱 | 国产欧美精品一区二区三区 | 国产一级久久久久 | 久日av| 麻豆精品国产91久久久久久 | 欧美a级成人淫片免费看 | 北条麻妃一区二区三区在线观看 | 欧美日韩视频在线第一区 | 日日夜夜天天 | 中文字幕国产视频 | 精品国产仑片一区二区三区 | 夜夜嗨av色一区二区不卡 | 免费一区二区 | 一本黄色片| 成人在线免费看 | 亚洲精品久久久久久下一站 | 91高清在线| 日韩免费视频 | 欧美精品在线看 | 91精品国产91久久久久久 | 国产精品视频久久 | 美国成人在线 | 欧美精品成人一区二区在线 | 欧美日韩免费视频 | 日日色视频 | 中文字幕综合在线 | 亚洲欧美日韩精品久久亚洲区 | 亚洲一级黄色 | 龙珠z国语版291集全 | 亚洲色图50p | 亚洲美女精品视频 | 欧美欧美欧美 | 亚州中文| 91精品国产综合久久香蕉的用户体验 | 欧美日韩精品久久久免费观看 | 国产精品片aa在线观看 | 日本一区二区免费在线播放 | 久久精品国产99精品国产亚洲性色 | 精品成人 |