一起來了解一下JavaScript的預(yù)編譯(小結(jié))
js運行代碼共分三步
語法分析 預(yù)編譯 解釋執(zhí)行JavaScript代碼在運行時,首先會進(jìn)行語法分析,通篇檢查代碼是否存在低級錯誤,然后進(jìn)行預(yù)編譯,整理內(nèi)部的一個邏輯,最后再開始一行一行的執(zhí)行代碼
語法分析代碼在執(zhí)行之前,系統(tǒng)會通篇掃描一遍,檢查代碼有沒有低級的語法錯誤,比如少寫個大括號。
預(yù)編譯預(yù)編譯前奏預(yù)編譯發(fā)生在函數(shù)執(zhí)行的前一刻。變量未經(jīng)聲明就賦值,此變量為全局對象所有
a = 3
var b = c = 4
一切聲明的全局變量,全是window的屬性
var a = 1 ===> window.a = 1
預(yù)編譯四部曲 創(chuàng)建AO(Activation Object)對象(里面存儲的是函數(shù)內(nèi)部的局部變量) 找形參和變量聲明,將變量和形參名做為AO屬性名,值為undefined 將實參和形參統(tǒng)一 在函數(shù)體里面找函數(shù)聲明,值賦予函數(shù)體用一個例子來說明一下,也可以自己先給出一個答案,再繼續(xù)往下看
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)對象 {}第二步,找形參和變量聲明,將變量和形參名做為AO屬性名,值為undefined
{ a: undefined, b: undefined,}
第三步,將實參和形參統(tǒng)一
{ a: 1, b: undefined,}
第四步,找函數(shù)聲明,值賦予函數(shù)體
{ a: function a() {}, b: undefined, d: function d() {}}
所以在函數(shù)fn執(zhí)行的前一刻,a、b、d的值如上所示
所以fn(1)執(zhí)行的結(jié)果為
// ƒ a() {}// 123// 123// ƒ () {}// ƒ d() {}
在全局作用域里,預(yù)編譯過程有些許不同
創(chuàng)建GO(Global Object)對象(里面存儲的是函數(shù)內(nèi)部的全局變量)GO === window 找形參和變量聲明,將變量和形參名做為GO屬性名,值為undefined 在函數(shù)體里面找函數(shù)聲明,值賦予函數(shù)體解釋執(zhí)行一行一行的執(zhí)行代碼
實踐題這里有幾個例題,有興趣的可以看一下
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);總結(jié)
多數(shù)情況下,我們都是采用下面的這種方式來處理預(yù)編譯的一個過程
函數(shù)聲明,整體提升 變量聲明,聲明提升若是遇見復(fù)雜的情況就只能采用最原始的方式來解決問題了
到此這篇關(guān)于一起來了解一下JavaScript的預(yù)編譯(小結(jié))的文章就介紹到這了,更多相關(guān)JavaScript 預(yù)編譯內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. ASP 信息提示函數(shù)并作返回或者轉(zhuǎn)向2. asp(vbs)Rs.Open和Conn.Execute的詳解和區(qū)別及&H0001的說明3. CSS hack用法案例詳解4. PHP設(shè)計模式中工廠模式深入詳解5. 用css截取字符的幾種方法詳解(css排版隱藏溢出文本)6. ASP+ajax實現(xiàn)頂一下、踩一下同支持與反對的實現(xiàn)代碼7. .NET中l(wèi)ambda表達(dá)式合并問題及解決方法8. ThinkPHP5實現(xiàn)JWT Token認(rèn)證的過程(親測可用)9. asp中response.write("中文")或者js中文亂碼問題10. JSP數(shù)據(jù)交互實現(xiàn)過程解析
