成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript-預(yù)編譯

Aldous / 1729人閱讀

摘要:預(yù)編譯發(fā)生在函數(shù)執(zhí)行前也就是說函數(shù)執(zhí)行時,預(yù)編譯已經(jīng)結(jié)束。五總結(jié)理解預(yù)編譯需要明白變量函數(shù)聲明和變量賦值。預(yù)編譯階段,只進(jìn)行變量函數(shù)聲明,不會進(jìn)行變量的初始化即變量賦值,所有變量的值都是變量賦值是在解釋執(zhí)行階段才進(jìn)行的。

一、JS的概念
JavaScript ( JS ) 是一種具有函數(shù)優(yōu)先的輕量級解釋型或即時編譯型的編程語言。
二、JS語言特點(diǎn) 2.1 單線程

(1)JavaScript語言的一大特點(diǎn)就是單線程,也就是說,同一個時間只能做一件事。那么,為什么JavaScript不能有多個線程呢?這樣能提高效率。

(2)JavaScript的單線程,與它的用途有關(guān)。作為瀏覽器腳本語言,JavaScript的主要用途是與用戶互動,以及操作DOM。這決定了它只能是單線程,否則會帶來很復(fù)雜的同步問題。比如,假定JavaScript同時有兩個線程,一個線程在某個DOM節(jié)點(diǎn)上添加內(nèi)容,另一個線程刪除了這個節(jié)點(diǎn),這時瀏覽器應(yīng)該以哪個線程為準(zhǔn)?

2.2 解釋型語言

(1)解釋一行,執(zhí)行一行;不通篇編譯為一個文件再執(zhí)行。

三、 JS執(zhí)行過程 3.1 語法分析
通篇掃描低級語法錯誤,但不執(zhí)行。
3.2 預(yù)編譯 3.3 解釋執(zhí)行 四、JS的預(yù)編譯

(1)預(yù)編譯,簡單理解,就是在內(nèi)存中開辟一塊空間,用來存放變量和函數(shù)。

(2)預(yù)編譯發(fā)生在函數(shù)執(zhí)行前;也就是說函數(shù)執(zhí)行時,預(yù)編譯已經(jīng)結(jié)束。

4.1 變量 聲明提升
變量聲明語句放到最前,賦值不變。

JavaScript的函數(shù)作用域是指在函數(shù)內(nèi)聲明的所有變量在函數(shù)體內(nèi)始終是有定義的,也就是說變量在聲明之前已經(jīng)可用, 所有這種特性稱為聲明提前(hoisting),即JavaScript函數(shù)里的所有聲明(只是聲明,但不涉及賦值)都被提前到函數(shù)體的頂部,而變量賦值操作留在原來的位置。

(1)JavaScript 腳本在執(zhí)行之前先進(jìn)行預(yù)編譯,所以 ① 和 ③ 不會執(zhí)行,而是先執(zhí)行 ②,進(jìn)行預(yù)編譯;

(2)因?yàn)轭A(yù)編譯階段是不對變量進(jìn)行賦值的,即不進(jìn)行初始化,所以 ② 也只執(zhí)行前半部分 var a ,由于只聲明了變量,而沒有進(jìn)行賦值,所以此時變量的值為 undefined;

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

4.2 函數(shù)聲明整體提升
函數(shù)聲明語句將會被提升到外部腳本或者外部函數(shù)作用域的頂部。

(1)其實(shí)函數(shù)聲明 function test() {} 已經(jīng)提升到 test() 之前,這也是預(yù)編譯導(dǎo)致的,所以函數(shù) test() 能夠在定義之前執(zhí)行,并且沒有報錯。

五、總結(jié)

(1)理解預(yù)編譯需要明白 ①變量/函數(shù)聲明 和 ②變量賦值。

(2)預(yù)編譯階段,只進(jìn)行 變量/函數(shù)聲明,不會進(jìn)行變量的初始化(即變量賦值,所有變量的值都是 undefined);變量賦值 是在解釋執(zhí)行階段才進(jìn)行的。

閱讀更多

參考文章 JavaScript的預(yù)編譯

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/94782.html

相關(guān)文章

  • JavaScript預(yù)編譯過程分析

    摘要:一概念是一個單線程解釋型的編程語言。預(yù)編譯大致可分為步創(chuàng)建對象找形參和變量聲明,將形參和變量名作為屬性名,值為將實(shí)參值和形參統(tǒng)一在函數(shù)體里面找函數(shù)聲明,值賦予函數(shù)體。 一、JavaScript概念 JavaScript ( JS ) 是一個單線程、解釋型的編程語言。 二、JavaScript語言特點(diǎn) 2.1 單線程 JavaScript語言的一大特點(diǎn)就是單線程,也就是說,同一個時間只能...

    graf 評論0 收藏0
  • 5分鐘讀懂JavaScript預(yù)編譯流程

    摘要:大家都知道是解釋型語言,既然是解釋型語言,就是編譯一行,執(zhí)行一行,那又何來預(yù)編譯一說呢腳本執(zhí)行引擎都做了什么呢今天我們就來看看吧。全局域就是一切聲明的全局變量,全是的屬性等同于函數(shù)預(yù)編譯發(fā)生在函數(shù)執(zhí)行前一刻。 大家都知道JavaScript是解釋型語言,既然是解釋型語言,就是編譯一行,執(zhí)行一行,那又何來預(yù)編譯一說呢?腳本執(zhí)行js引擎都做了什么呢?今天我們就來看看吧。 1-JavaScr...

    Baoyuan 評論0 收藏0
  • javascript系列--javascript引擎執(zhí)行的過程的理解--語法分析和預(yù)編譯階段

    摘要:所以覺得把這個執(zhí)行的詳細(xì)過程整理一下,幫助更好的理解。類似的語法報錯的如下圖所示三預(yù)編譯階段代碼塊通過語法分析階段之后,語法都正確的下回進(jìn)入預(yù)編譯階段。另開出新文章詳細(xì)分析,主要介紹執(zhí)行階段中的同步任務(wù)執(zhí)行和異步任務(wù)執(zhí)行機(jī)制事件循環(huán)。 一、概述 js是一種非常靈活的語言,理解js引擎的執(zhí)行過程對于我們學(xué)習(xí)js是非常有必要的??戳撕芏噙@方便文章,大多數(shù)是講的是事件循環(huán)(event loo...

    malakashi 評論0 收藏0
  • 淺談JavaScript作用域

    摘要:我們在面試時,總會碰到一些奇奇怪怪的關(guān)于作用域的面試題,其實(shí)弄清楚原理,萬變不離其宗,大部分的面試題都可以得姐。 showImg(https://segmentfault.com/img/bV7Cri?w=1563&h=879); 我們在面試時,總會碰到一些奇奇怪怪的關(guān)于 作用域 的面試題,其實(shí)弄清楚原理,萬變不離其宗,大部分的面試題都可以得 ‘姐’。 所以,今天我們來談?wù)?JavaS...

    figofuture 評論0 收藏0
  • JavaScript預(yù)編譯過程與作用域

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

    ziwenxie 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<