溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript預編譯什么意思

發布時間:2021-03-01 16:39:12 來源:億速云 閱讀:184 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關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. 在函數體里面找函數聲明,值賦予函數體

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

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

{
 a: undefined,
 b: undefined,
}

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

{
 a: 1,
 b: undefined,
}

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

{
 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

  • 在函數體里面找函數聲明,值賦予函數體

解釋執行

一行一行的執行代碼

實踐題

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

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);
global = 100;
function fn() {
 console.log(global);
 global = 200;
 console.log(global);
 var global = 300;
}
fn();
var global;
function test() {
 console.log(b);
 if (a) {
  var b = 100;
 }
 c = 234;
 console.log(c);
}
var a;
test();
a = 10;
console.log(c);

上述就是小編為大家分享的JavaScript預編譯什么意思了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女