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