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

資訊專欄INFORMATION COLUMN

JavaScript作用域

Anleb / 918人閱讀

摘要:理解作用域演員表首先介紹將要參與到對程序進(jìn)行處理的過程中的演員們,這樣才能理解接下來將要聽到的對話。查找的過程由作用域進(jìn)行協(xié)助,但是引擎執(zhí)行怎樣的查找,會影響最終的查找結(jié)果。

幾乎所有編程語言最基本的功能之一,就是能夠存儲變量當(dāng)中的值,并能在之后對這個值進(jìn)行訪問或修改。事實上,正是這種存儲和訪問變量的值的能力將狀態(tài)帶給了程序。

但是將變量引入程序會引起幾個很有意思的問題,也正是我們將要討論的:
這些變量住在哪里?換句話說,它們存儲在哪里?最重要的是,程序需要時如何找到它們?

這些問題說明需要一套設(shè)計良好的規(guī)則來存儲變量,并且之后可以方便地找到這些變量。這套規(guī)則被稱為作用域。

編譯原理

盡管通常將JavaScript歸類為“動態(tài)”或“解釋執(zhí)行”語言,但事實上它是一門編譯語言。
但與傳統(tǒng)的編譯語言不同,它不是提前編譯的,編譯結(jié)果也不能在分布式系統(tǒng)中進(jìn)行移植。

比起那些編譯過程只有三個步驟的語言的編譯器,JavaScript引擎要復(fù)雜得多。例如,在語法分析和代碼生成階段有特定的步驟來對性能進(jìn)行優(yōu)化,包括對冗余元素進(jìn)行優(yōu)化等。

首先,JavaScript引擎不會有大量的時間來進(jìn)行優(yōu)化,因為與其他語言不通,JavaScript的編譯過程不是發(fā)生在構(gòu)建之前的。

對于JavaScript來說,大部分情況下編譯發(fā)生在代碼執(zhí)行前的幾微妙的時間內(nèi)。在我們所要討論的作用域的背后,JavaScript引擎用盡了各種方法(比如JIT,可以延遲編譯甚至實施重新編譯)來保證性能最佳。

簡單地說,任何JavaScript代碼片段在執(zhí)行前都要進(jìn)行編譯(通常就在執(zhí)行前)。

理解作用域 演員表

首先介紹將要參與到對程序 var a = 2;進(jìn)行處理的過程中的演員們,這樣才能理解接下來
將要聽到的對話。

引擎

從頭到尾負(fù)責(zé)整個JavaScript程序的編譯及執(zhí)行過程。

編譯器

引擎的好朋友之一,負(fù)責(zé)語法分析及代碼生成等臟活累活

作用域

引擎的另一位好朋友,負(fù)責(zé)收集并維護(hù)由所有聲明的標(biāo)識符組成的一系列查詢,并實施一套非常嚴(yán)格的規(guī)則,確定當(dāng)前執(zhí)行的代碼對這些標(biāo)識符的訪問權(quán)限。

對話

當(dāng)你看見var a=2;這段程序時,很可能認(rèn)為這是一句聲明。但我們的新朋友引擎卻不這么看。
事實上,引擎認(rèn)為這里有兩個完全不同的聲明,一個由編譯器在編譯時處理,另一個則由引擎在運行時處理。

變量的賦值操作會執(zhí)行兩個動作,首先編譯器會在當(dāng)前作用域中聲明一個變量,然后在運行時引擎會在作用域中查找該變量,如果能夠找到就會對它賦值。

編譯器有話說

編譯器在編譯過程的第二步代碼中生成了代碼,引擎執(zhí)行它時,會通過查找變量a來判斷它是否已聲明過。查找的過程由作用域進(jìn)行協(xié)助,但是引擎執(zhí)行怎樣的查找,會影響最終的查找結(jié)果。

在上面的例子中,引擎會為變量a進(jìn)行LHS查詢。另外一個查找的類型叫作RHS.換句話說,當(dāng)變量出現(xiàn)在賦值操作的左側(cè)時進(jìn)行LHS查詢,出現(xiàn)在右側(cè)時進(jìn)行RHS查詢。

講的更準(zhǔn)確一點,RHS查詢與簡單地查找某個變量的值別無二致,而LHS查詢則是試圖找到變量的容器本身,從而可以對其賦值。

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

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

相關(guān)文章

  • JavaScript深入之詞法作用和動態(tài)作用

    摘要:作用域作用域是指程序源代碼中定義變量的區(qū)域。采用詞法作用域,也就是靜態(tài)作用域。而與詞法作用域相對的是動態(tài)作用域,函數(shù)的作用域是在函數(shù)調(diào)用的時候才決定的。前面我們已經(jīng)說了,采用的是靜態(tài)作用域,所以這個例子的結(jié)果是。 JavaScript深入系列的第二篇,JavaScript采用詞法作用域,什么語言采用了動態(tài)作用域?兩者的區(qū)別又是什么?還有一個略難的思考題,快來看看吧。 作用域 作用域是指...

    gclove 評論0 收藏0
  • 理解JavaScript的核心知識點:作用

    摘要:也毫不例外,但在中作用域的特性與其他高級語言稍有不同,這是很多學(xué)習(xí)者久久難以理清的一個核心知識點。主要使用的是函數(shù)作用域。 關(guān)于作用域:About Scope 作用域是程序設(shè)計里的基礎(chǔ)特性,是作用域使得程序運行時可以使用變量存儲值、記錄和改變程序的狀態(tài)。JavaScript 也毫不例外,但在 JavaScript 中作用域的特性與其他高級語言稍有不同,這是很多學(xué)習(xí)者久久難以理清的一個核...

    HelKyle 評論0 收藏0
  • 談?wù)?em>javascript語法里一些難點問題(二)

    摘要:講作用域鏈?zhǔn)紫纫獜淖饔糜蛑v起,下面是百度百科里對作用域的定義作用域在許多程序設(shè)計語言中非常重要。原文出處談?wù)務(wù)Z法里一些難點問題二 3) 作用域鏈相關(guān)的問題 作用域鏈?zhǔn)莏avascript語言里非常紅的概念,很多學(xué)習(xí)和使用javascript語言的程序員都知道作用域鏈?zhǔn)抢斫鈐avascript里很重要的一些概念的關(guān)鍵,這些概念包括this指針,閉包等等,它非常紅的另一個重要原因就...

    Enlightenment 評論0 收藏0
  • 大話javascript 1期:作用作用

    摘要:全局作用域局部作用域局部作用域全局作用域局部作用域塊語句沒有塊級作用域塊級聲明包括和,以及和循環(huán),和函數(shù)不同,它們不會創(chuàng)建新的作用域。局部作用域只在該函數(shù)調(diào)用執(zhí)行期間存在。 一、什么是作用域? 作用域是你的代碼在運行時,各個變量、函數(shù)和對象的可訪問性。(可產(chǎn)生作用的區(qū)域) 二、JavaScript中的作用域 在 JavaScript 中有兩種作用域 全局作用域 局部作用域 當(dāng)變量定...

    NicolasHe 評論0 收藏0
  • 深入學(xué)習(xí)js之——詞法作用和動態(tài)作用

    摘要:在中的應(yīng)用采用詞法作用域,也就是靜態(tài)作用域。那什么又是詞法作用域或者靜態(tài)作用域呢請繼續(xù)往下看靜態(tài)作用域與動態(tài)作用域因為采用的是詞法作用域函數(shù)的作用域在函數(shù)定義的時候就決定了。 開篇 當(dāng)我們在開始學(xué)習(xí)任何一門語言的時候,都會接觸到變量的概念,變量的出現(xiàn)其實是為了解決一個問題,為的是存儲某些值,進(jìn)而,存儲某些值的目的是為了在之后對這個值進(jìn)行訪問或者修改,正是這種存儲和訪問變量的能力將狀態(tài)給...

    shiweifu 評論0 收藏0

發(fā)表評論

0條評論

Anleb

|高級講師

TA的文章

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