JavaScript預(yù)編譯的基本概念和過程詳解
全局預(yù)編譯
- 創(chuàng)建全局對象(Global Object, GO):
- 在瀏覽器中,全局對象是
window
對象。
- 在瀏覽器中,全局對象是
- 處理變量聲明:
- 找到所有的變量聲明,將變量名作為全局對象的屬性名,初始值為
undefined
。
- 找到所有的變量聲明,將變量名作為全局對象的屬性名,初始值為
- 處理函數(shù)聲明:
- 找到所有的函數(shù)聲明,將函數(shù)名作為全局對象的屬性名,值為函數(shù)對象(整個函數(shù)體)。
示例:
console.log(a); // undefined var a = 10; console.log(foo); // Function: foo function foo() { return "hello"; }
全局預(yù)編譯后的全局對象:
1.創(chuàng)建GO對象 GO{ // 空對象 } 2.處理變量聲明 GO = { a: undefined } 3.處理函數(shù)聲明 GO = { a: undefined, fn: function() {} }
函數(shù)預(yù)編譯
- 創(chuàng)建活動對象(Activation Object, AO):
- 每次調(diào)用函數(shù)時,都會創(chuàng)建一個新的活動對象。
- 處理形參和變量聲明:
- 將形參和變量名作為活動對象的屬性名,初始值為
undefined
。
- 將形參和變量名作為活動對象的屬性名,初始值為
- 形參和實參統(tǒng)一:
- 將實參值賦值給對應(yīng)的形參。
- 處理函數(shù)聲明:
- 找到所有的函數(shù)聲明,將函數(shù)名作為活動對象的屬性名,值為函數(shù)對象。
示例:
function bar(x, y) { console.log(x); // Function: x var x = 20; console.log(x); // 20 function x() {} console.log(x); // 20 var y = function() {}; console.log(y); // Function: y } bar(2);
函數(shù)預(yù)編譯后的活動對象:
1.創(chuàng)建AO對象 AO{ //空對象 } 2.處理形參和變量聲明,值為undefined AO = { x: undefined, y: undefined, } 3.實參和形參統(tǒng)一 AO = { x: 2, y: undefined } 4.處理函數(shù)聲明 AO = { x: 2, y: function() {}, x: function() {} }
總結(jié)
通過預(yù)編譯,JavaScript確保在代碼執(zhí)行時,所有變量和函數(shù)都已經(jīng)聲明完畢,避免引用錯誤。這一機制是理解JavaScript作用域和提升(hoisting)的基礎(chǔ)。
到此這篇關(guān)于JavaScript預(yù)編譯的基本概念和過程詳解的文章就介紹到這了,更多相關(guān)JavaScript預(yù)編譯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript圖片旋轉(zhuǎn)效果實現(xiàn)方法詳解
這篇文章主要介紹了JavaScript圖片旋轉(zhuǎn)效果實現(xiàn)方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06JavaScript解決浮點數(shù)計算不準(zhǔn)確問題的方法分析
這篇文章主要介紹了JavaScript解決浮點數(shù)計算不準(zhǔn)確問題的方法,結(jié)合實例形式分析了javascript浮點數(shù)運算精度誤差的原因以及相關(guān)的解決方法與具體操作技巧,需要的朋友可以參考下2018-07-07javascript DOM設(shè)置樣式詳細(xì)說明和示例代碼
JavaScript也可以用來修改DOM元素的樣式,我們可以使用style屬性來訪問和修改元素的樣式屬性,這篇文章主要給大家介紹了關(guān)于javascript DOM設(shè)置樣式詳細(xì)說明和示例代碼的相關(guān)資料,需要的朋友可以參考下2024-06-06js 頁面關(guān)閉前的出現(xiàn)提示的實現(xiàn)代碼
主流的瀏覽器都支持onbeforeunload事件(即頁面卸載前觸發(fā)的事件),而現(xiàn)在大多網(wǎng)站都用到了此功能2011-05-05JavaScript 設(shè)計模式學(xué)習(xí) Factory
通過接口實現(xiàn)工廠,這是通過List方式顯示RSS 等實現(xiàn)代碼。2009-07-07Javascript中的函數(shù)聲明與函數(shù)表達(dá)式(奇技淫巧)
Javascript有很多有趣的用法,在Google Code Search里能找到不少,今天從火丁筆記看到的,非常不錯,推薦大家看下。2011-03-03