本篇文章為大家帶來了JavaScript中作用域鏈的相關知識,外部空間不能存取內部變量,我們往往只知道這一基本規則,那實現這一基本規則的基本底層原理是什麼呢?希望能給大家一些幫助!
作用域
1.什麼是作用域
簡單來說,作用域(英文:scope)是據名稱來找出變數的一套規則,可以把作用域通俗理解為一個封閉的空間,這個空間是封閉的,不會對外部產生影響,外部空間不能存取內部空間,但是內部空間可以存取將其包裹在內的外部空間。
2.[[Scopes]]屬性
在javascript中,每個函數都是一個對象,在物件中有些屬性我們可以訪問,有些我們是不能自由訪問的,[[Scopes]]屬性就是其中之一,這個屬性只能被JavaScript引擎讀取。
其實[[scope]]就是我們常說的作用域,其中儲存了作用域運作期的上下文集合。
在這裡因為func.prototype.constructor和func指向同一個函數,所以在這裡我們透過存取函數func的原型物件來查看[[Scopes]]屬性
#3.作用域鏈
[[scope]]中儲存的執行期的上下文物件的集合,這個集合呈現鍊式連接,我們把這種鍊式連接叫做作用域鏈。 JavaScript正是透過作用域鏈來找出變數的,其尋找方式是沿著作用域鏈的頂端依序向下查詢(在哪個函數內部尋找對象,就在哪個函數作用域鏈中尋找)
#4.圖解找出變數原理
//以如下代码为例说明JavaScript通过作用域链查找变量的原理** function a() { function b() { var b = 123; } var a = 123; b(); } var glob = 100;
#1.當全域函數a()被定義時,作用域鏈如下
函數的[[Scopes]]屬性指向作用域鏈對象,此時作用域鏈只有一個鍵值對,這個鍵值對指向全域對象,全域對象儲存了全域下可以存取的東西,也就是最外層作用域,大家都可以存取的。
2.當全域函數a()被啟動呼叫時,作用域鏈如下
此時作用域鏈能夠第一個存取的是Activation Object中的鍵值對,如果沒有才存取全域物件
3.函數a()中函數b被定義時,b的作用域鏈如下
當b只是被定義沒有被呼叫時,b的作用域鍊和a是相同的
4.當函數a()中的函數b被啟動呼叫時,作用域鏈如下
作用域鏈最先指向函數b()的Activation Object,查找變數也是按作用域鏈順序訪問,找到就停止
5.總結
之所以外部作用域不能存取內部作用域的原因是外部作用域的作用域鏈沒有內部作用域的Activation Object,所以無法存取內部變量,內部作用域存取變數的順序是依照作用域鏈,先從裡面查找,沒有就沿著作用域鏈向外找,外部是全域作用域
相關推薦:javascript學習教學
##
以上是JavaScript底層原理之作用域鏈(圖文詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

是的,ReactApplicationsCanbEseo-FrylylywithProperStratecies.1)用戶 - 插圖(SSR)withToolslikenext.jstogenate.jstogenate fullhtmlforindexing.2)enasleStaticsiteSitegeneration(ssg)

React性能瓶颈主要由低效渲染、不必要的重渲染和组件内重的计算造成。1)使用ReactDevTools定位慢组件并应用React.memo优化。2)优化useEffect,确保仅在必要时运行。3)使用useMemo和useCallback进行记忆化处理。4)将大组件拆分为小组件。5)对于大数据列表,使用虚拟滚动技术优化渲染。通过这些方法,可以显著提升React应用的性能。

有人可能會尋找React的替代品,因為性能問題、學習曲線或探索不同的UI開發方法。 1)Vue.js因其易於集成和溫和的學習曲線而受到讚揚,適用於小型和大型應用。 2)Angular由Google開發,適合大型應用,具有強大的類型系統和依賴注入。 3)Svelte通過在構建時編譯成高效的JavaScript,提供出色的性能和簡潔性,但其生態系統仍在成長。選擇替代品時,應根據項目需求、團隊經驗和項目規模來決定。

KeysinReactarespecialattributesassignedtoelementsinarraysforstableidentity,crucialforthereconciliationalgorithmwhichupdatestheDOMefficiently.1)KeyshelpReacttrackchanges,additions,orremovalsinlists.2)Usingunique,stablekeyslikeIDsratherthanindicespreve

toreCesetUpoverHeadInreActProjects,UsetoolslikecreateActApp(CRA),Next.js,Gatsby,orstarterkits和ManaintainamodullStructur e.1)crasimplifiessetupwithasinglecommand.2)next.jsandgatsbymorefermorefeaturesbutarearningcurve.3)starterkitsprovidecomprehensi

useState()isaReacthookusedtomanagestateinfunctionalcomponents.1)Itinitializesandupdatesstate,2)shouldbecalledatthetoplevelofcomponents,3)canleadto'stalestate'ifnotusedcorrectly,and4)performancecanbeoptimizedusinguseCallbackandproperstateupdates.

ReactispupularduetoItsOmpontement,基於虛擬,虛擬詞,Richecosystem和declarativedation.1)基於組件的harchitectureallowslowsforreusableuipieces。

todebugreactapplicationsefectefectionfection,usethestertate:1)proppropdrillingwithcontextapiorredux.2)使用babortControllerToptopRollerTopRollerTopRollerTopRollerTopRollerTopRollerTopRollerTopRollerTopRollerTopRaceeDitions.3)intleleassynChronOusOperations.3)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具