亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JavaScript的預(yù)編譯過(guò)程分析

graf / 3354人閱讀

摘要:一概念是一個(gè)單線程解釋型的編程語(yǔ)言。預(yù)編譯大致可分為步創(chuàng)建對(duì)象找形參和變量聲明,將形參和變量名作為屬性名,值為將實(shí)參值和形參統(tǒng)一在函數(shù)體里面找函數(shù)聲明,值賦予函數(shù)體。

一、JavaScript概念

JavaScript ( JS ) 是一個(gè)單線程、解釋型的編程語(yǔ)言。

二、JavaScript語(yǔ)言特點(diǎn) 2.1 單線程

JavaScript語(yǔ)言的一大特點(diǎn)就是單線程,也就是說(shuō),同一個(gè)時(shí)間只能做一件事。

2.2 解釋型語(yǔ)言

自上而下,解釋一行,執(zhí)行一行;不會(huì)通篇編譯為一個(gè)文件再執(zhí)行。

三、 JavaScript執(zhí)行過(guò)程 3.1 語(yǔ)法分析

顧名思義 就是檢查一遍js代碼內(nèi)有沒(méi)有出現(xiàn)語(yǔ)法錯(cuò)誤(比如少些個(gè)分號(hào),多寫(xiě)個(gè)括號(hào)等);語(yǔ)法分析期間不會(huì)執(zhí)行代碼

3.2 預(yù)編譯

預(yù)編譯發(fā)生在函數(shù)執(zhí)行的前一刻
全局下:
全局的變量聲明和函數(shù)聲明則會(huì)存放在全局對(duì)象內(nèi)(Global Object 簡(jiǎn)稱GO,它是window的一部分,你可以直接把他理解成window對(duì)象)中
函數(shù)體內(nèi):
預(yù)編譯會(huì)提前把函數(shù)里的變量聲明和函數(shù)聲明依據(jù)規(guī)則存放在該活動(dòng)對(duì)象內(nèi)(Activation Object,簡(jiǎn)稱AO),

預(yù)編譯簡(jiǎn)單理解就是在內(nèi)存中開(kāi)辟一些空間,存放一些變量與函數(shù) 。

預(yù)編譯大致可分為4步:

創(chuàng)建AO(GO)對(duì)象

找形參和變量聲明,將形參和變量名作為AO(GO)屬性名,值為undefined

將實(shí)參值和形參統(tǒng)一

在函數(shù)體里面找函數(shù)聲明,值賦予函數(shù)體。

所以如果遇到下面這種情況,當(dāng)函數(shù)聲明和變量聲明名稱相同時(shí):

console.log(a); 
var a= 1;
function a(){};

編譯后的代碼其實(shí)是:

var a;
function a(){};
console.log(a);
a= 1;

所以最后輸出的是:

function a() {}
預(yù)編譯小節(jié)

預(yù)編譯兩個(gè)小規(guī)則

函數(shù)聲明整體提升—(具體點(diǎn)說(shuō),無(wú)論函數(shù)調(diào)用和聲明的位置是前是后,系統(tǒng)總會(huì)把函數(shù)聲明移到調(diào)用前面)

變量 聲明提升—(具體點(diǎn)說(shuō),無(wú)論變量調(diào)用和聲明的位置是前是后,系統(tǒng)總會(huì)把聲明移到調(diào)用前,注意僅僅只是聲明,所以值是undefined),只有在解釋執(zhí)行階段才會(huì)進(jìn)行變量初始化,匿名函數(shù)不參與預(yù)編譯。

預(yù)編譯前奏

imply global 即任何變量,如果未經(jīng)聲明就賦值,則此變量就位全局變量所有(全局域就是window) 。

一切聲明的全局變量,全是window的屬性。

3.3 解釋執(zhí)行

預(yù)編譯完畢之后,JavaScript 腳本開(kāi)始執(zhí)行,執(zhí)行順序按照從上到下的順序執(zhí)行。

總結(jié)

JavaScript執(zhí)行順序

語(yǔ)法分析

預(yù)編譯
2.1. 創(chuàng)建AO(GO)對(duì)象
2.2. 找形參和變量聲明,將形參和變量名作為AO(GO)屬性名,值為undefined
2.3. 將實(shí)參值和形參統(tǒng)一
2.4. 在函數(shù)體里面找函數(shù)聲明,值賦予函數(shù)體。

解釋執(zhí)行

練習(xí):

function a(a){
    console.log(a);
    a= 2;
    console.log(b);
    var b= 3;
    console.log(a);
}
a(1);
console.log(a);

你可以先試想一下結(jié)果,然后復(fù)制代碼到控制臺(tái)去驗(yàn)證你的答案是否正確。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/99921.html

相關(guān)文章

  • JavaScript的預(yù)編譯過(guò)程與作用域

    摘要:詞法作用域是一種靜態(tài)作用域這個(gè)例子的結(jié)果按靜態(tài)作用域來(lái)分析執(zhí)行函數(shù),先從函數(shù)內(nèi)部查找是否有局部變量,如果沒(méi)有,就根據(jù)書(shū)寫(xiě)的位置,查找上面一層的代碼,也就是等于,所以結(jié)果會(huì)打印。靜態(tài)作用域,決定的是作用域鏈的順序。 博客原文地址:https://finget.github.io/2018/03/01/javascriptPrecompile/看不明白的地方歡迎提問(wèn),有理解的不對(duì)的地方希望...

    ziwenxie 評(píng)論0 收藏0
  • JavaScript-預(yù)編譯

    摘要:預(yù)編譯發(fā)生在函數(shù)執(zhí)行前也就是說(shuō)函數(shù)執(zhí)行時(shí),預(yù)編譯已經(jīng)結(jié)束。五總結(jié)理解預(yù)編譯需要明白變量函數(shù)聲明和變量賦值。預(yù)編譯階段,只進(jìn)行變量函數(shù)聲明,不會(huì)進(jìn)行變量的初始化即變量賦值,所有變量的值都是變量賦值是在解釋執(zhí)行階段才進(jìn)行的。 一、JS的概念 JavaScript ( JS ) 是一種具有函數(shù)優(yōu)先的輕量級(jí)解釋型或即時(shí)編譯型的編程語(yǔ)言。 二、JS語(yǔ)言特點(diǎn) 2.1 單線程 (1)JavaScri...

    Aldous 評(píng)論0 收藏0
  • 開(kāi)發(fā)者的進(jìn)階之路:用語(yǔ)法樹(shù)來(lái)實(shí)現(xiàn)預(yù)編譯

    摘要:借助語(yǔ)法樹(shù),開(kāi)發(fā)者能夠更好地展現(xiàn)和修改源程序代碼,優(yōu)化開(kāi)發(fā)環(huán)節(jié),提高安全系數(shù),還能進(jìn)一步實(shí)現(xiàn)安卓預(yù)編譯。用語(yǔ)法樹(shù)來(lái)實(shí)現(xiàn)預(yù)編譯指令開(kāi)發(fā)者還能用語(yǔ)法樹(shù)來(lái)實(shí)現(xiàn)預(yù)編譯指令,常見(jiàn)的預(yù)編譯指令主要分為條件編譯宏定義文件包含三大類。 如何在保證安全性的前提下,提升開(kāi)發(fā)過(guò)程的效率,是每個(gè)開(kāi)發(fā)者都在不斷探索的問(wèn)題。借助語(yǔ)法樹(shù),開(kāi)發(fā)者能夠更好地展現(xiàn)和修改源程序代碼,優(yōu)化開(kāi)發(fā)環(huán)節(jié),提高安全系數(shù),還能進(jìn)一步實(shí)...

    CoffeX 評(píng)論0 收藏0
  • 【JDBC系列】從源碼角度理解JDBC和Mysql的預(yù)編譯特性

    摘要:我們對(duì)語(yǔ)句做適當(dāng)改變,就完成了注入,因?yàn)槠胀ǖ牟粫?huì)對(duì)做任何處理,該例中單引號(hào)后的生效,拉出了所有數(shù)據(jù)。查詢資料后,發(fā)現(xiàn)還要開(kāi)啟一個(gè)參數(shù),讓端緩存,緩存是級(jí)別的。結(jié)論是個(gè)好東西。 背景 最近因?yàn)楣ぷ髡{(diào)整的關(guān)系,都在和數(shù)據(jù)庫(kù)打交道,增加了許多和JDBC親密接觸的機(jī)會(huì),其實(shí)我們用的是Mybatis啦。知其然,知其所以然,是我們工程師童鞋們應(yīng)該追求的事情,能夠幫助你更好的理解這個(gè)技術(shù),面對(duì)問(wèn)題...

    longshengwang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<