這次帶給大家基礎的JavaScript知識總結,總共有十一個知識點,基礎的JavaScript知識總結(九)作用域、作用域鏈精解下面就是實戰案例,一起來看一下。
作用域精簡
[[scope]] : 每個JavaScript函數都是一個物件。物件中有些屬性我們可以訪問,但有些不可以,這些屬性只提供JavaScript引擎訪問,[[scope]]就是其中一個。
[[scope]]指的就是我們所說的作用域,其中儲存了運行期上下文的集合
作用域鏈: [[scope]]中儲存的執行期上下文物件的集合,這個集合呈現鍊式鏈接,我們把這種鍊式連結叫做作用域鏈
運行期上下文: 當函數執行時,會建立一個稱為執行期上下文的內部對象。一個執行期上下文定義了一個函數執行時的環境,函數每次執行時對應的執行上下文都是獨一無二的,所以多次呼叫一個函數會導致創建多個執行期上下文,當函數執行完畢,它所產生的執行上下文被銷毀
查找變數: 從作用域鏈的頂端依序向下查找
function a() { function b(){ var b = 234; } var a = 123; b(); }var glob = 100; a();
首先我們來看上面的函數,這個是個整體的函數,a在這個全域的作用域裡面,然後下面有glob這個變數,然後有這個a執行;
第一步: 首先系統看到的肯定是這個a定義,a定義的話有這個[[scope]]。
a / [[scope]] scope指向scope chain scope chain scope指向这里
0 這個位置的0指向GO
Global Object
#0指向的是這個表格
this window window (object) document (object) a (function) glob 100 [[scope]]里面有这个全局的执行期上下文,然后a被执行了,a被执行,a产生的这个AO,把自己的AO存到作用域链的最顶端,形成一个新的作用域链,现在的a的[[scope]]和刚才的那个[[scope]]不一样了 a / [[scope]] scope指向scope chain scope chain scope指向这里
0 這個位置的0指向AO
1 這個位置的0指向GO
##Activation Object
0指向的是這個表
this window arguents [] a 123 b (function) Global Object
1指向的是這個表
this window window (object) document (object) a (function) glob 100
它的不一樣只是裡面存的值不一樣了[ [scope]]還是那個[[scope]],這時候我們不看下面,這個時候假如我們訪問一個變數的話,我們訪問的是a的[[scope]],是從a的[[scope]]裡面拿東西,a的scope是一個倉庫,這個庫裡面存了個作用域鏈,裡面掛了各種變量,我去裡面拿東西的時候,就置頂向下去找。
然後a的執行,產生了b被定義,a執行了b才能被定義,b被定義的時候有個天生的[[scope]],[[scope]]裡面存了一個它所應該有的作用域鏈,但是它有的作用域鍊和a的不一樣,a被定義的時候,是在全局裡面,所能返訪問的屬性也只有它自己的AO還有全局的GO,但b是在a函數裡面定義的,所以b的[[scope]]不但可以存取自己的AO,也可以存取到a的AO,還有全域的GO
b / [[scope]]
scope指向scope chain
scope chain
scope指向這裡
0 這個位置的0指向自己的AO
1 這個位置的1指向的a的AO
2 這個位置的0指向GO
Activation Object
0指向的是這個表
this window arguents [] b 234; Activation Object
1指向的是這個表
this window arguents [] a 123 b (function) Global Object
#1指向的是這個表
this window window (object) document (object) a (function) glob 100
作用域銷毀
當b執行完之後,銷毀自己的ao,回到定義狀態,等待下次被執行
因為b是函數a的最後一句,所以當b執行完之後,a也銷毀掉這麼連帶著b的[[scope]]也被銷毀,回到定義狀態,等待下次被執行//例子function a() { function b() { function c(){
}
c();
}
b();
}
a();
a defined a.[[scope]] --> 0:GOa doing a.[[scope]] --> 0:a的AO
1:GO
b defined b.[[scope]] --> 0:a的AO
1:GOb doing b.[[scope]] --> 0:自己的AO
1:a的AO
2:GO
c defined c.[[scope]] --> 0:a的AO
1:c的AO
2:GOc doing c.[[scope]] --> 0:自己的AO
1:b的AO
2:a的AO
3:GO
所以外部函數訪問不到
的屬性和值
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
相關閱讀:
基礎的JavaScript知識總結(六)函數、初始作用域(下)
以上是基礎的JavaScript知識總結(九)作用域、作用域鏈精解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SublimeText3漢化版
中文版,非常好用