這期內容當中小編將會給大家帶來有關JavaScript預編譯什么意思,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

js運行代碼共分三步
語法分析
預編譯
解釋執行
JavaScript代碼在運行時,首先會進行語法分析,通篇檢查代碼是否存在低級錯誤,然后進行預編譯,整理內部的一個邏輯,最后再開始一行一行的執行代碼
代碼在執行之前,系統會通篇掃描一遍,檢查代碼有沒有低級的語法錯誤,比如少寫個大括號。
預編譯發生在函數執行的前一刻。變量未經聲明就賦值,此變量為全局對象所有
a = 3
var b = c = 4
一切聲明的全局變量,全是window的屬性
var a = 1 ===> window.a = 1
創建AO(Activation Object)對象(里面存儲的是函數內部的局部變量)
找形參和變量聲明,將變量和形參名做為AO屬性名,值為undefined
將實參和形參統一
在函數體里面找函數聲明,值賦予函數體
用一個例子來說明一下,也可以自己先給出一個答案,再繼續往下看
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預編譯什么意思了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創新互聯行業資訊頻道。
網頁名稱:JavaScript預編譯什么意思-創新互聯
文章地址:http://www.yijiale78.com/article30/dehdso.html
成都網站建設公司_創新互聯,為您提供商城網站、手機網站建設、品牌網站設計、做網站、軟件開發、網站維護
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯