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

