這篇文章帶給大家的內容是關於JavaScript執行上下文的詳細介紹(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
在《深入學習js之-執行上下文堆疊》中說過,當JavaScript程式碼執行一段可執行程式碼(executable code)時,會建立對應的執行上下文(execution context)
對於每一個執行上下文,都有三個重要的屬性:
變數物件(Variable object VO)
作用域鏈(Scope chain)
this
本文我們結合這三個部分的內容,講講執行脈絡的具體處理過程。
思考題
在《深入學習js之-詞法作用域與動態作用域》中,提出這樣一道思考題:
// 思考题一: var scope = "global scope"; function checkscope(){ var scope = "local scope"; function f(){ return scope; } return f(); } checkscope(); // 思考题二: var scope = "global scope"; function checkscope(){ var scope = "local scope"; function f(){ return scope; } return f; } checkscope()();
兩段程式碼都會列印local scope
,但是還是有些許差異的,本文就詳細的解析執行上下文堆疊和執行上下文的具體變化過程。
具體分析
我們分析第一段程式碼:
var scope = "global scope"; function checkscope(){ var scope = "local scope"; function f(){ return scope; } return f(); } checkscope();
執行過程如下:
1、執行全域程式碼,建立全域執行上下文,全域上下文被壓入執行上下文堆疊
ECStack = [ globalContext ];
2、全域上下文初始化
globalContext = { VO: [global], Scope: [globalContext.VO], this: globalContext.VO }
2、初始化的同時,checkscope 函數被創建,保存作用域鍊到函數內部的屬性[[scope]]
checkscope.[[scope]] = [ globalContext.VO ];
3、執行checkScope 函數,建立checkScope 函數執行上下文,checkScope 函數執行上下文被壓入執行上下文堆疊:
ECStack = [ checkscopeContext, globalContext ];
4、checkscope 函數執行上下文初始化:
1.複製函數[[scope]] 屬性建立作用域鏈,
2.用arguments 建立活動對象,
3.初始化活動對象,即加入形參、函數宣告、變數聲明,
4.將活動物件壓入checkscope 作用域鏈頂端,
同時f 函數被創建,保存作用域鏈到f 函數的內部屬性[[scope]]
checkscopeContext = { AO: { arguments: { length: 0 }, scope: undefined, f: reference to function f(){} }, Scope: [AO, globalContext.VO], this: undefined }
5、執行f函數,建立f 函數執行上下文,f 函數執行上下文被壓入執行上下文堆疊
ECStack = [ fContext, checkscopeContext, globalContext ]
6、f 函數執行上下文初始化, 以下跟第4 步相同:
1.複製函數[[scope]]
屬性建立作用域鏈
2.用arguments 建立活動物件
3 .初始化活動對象,即加入形參、函數宣告、變數宣告
4.將活動物件壓入f 作用域鏈頂端
fContext = { AO: { arguments: { length: 0 } }, Scope: [AO, checkscopeContext.AO, globalContext.VO], this: undefined }
7、f 函數執行,沿著作用域鏈尋找scope值,返回scope 值
8、f 函數執行完畢,f 函數上下文從執行上下文堆疊中彈出
ECStack = [ checkscopeContext, globalContext ]
9、checkscope 函數執行完畢,checkscope 執行上下文從執行上下文堆疊中彈出
ECStack = [ globalContext ]
以上是JavaScript執行上下文的詳細介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...

在JavaScript中如何獲取原型鏈上函數的參數在JavaScript編程中,理解和操作原型鏈上的函數參數是常見且重要的任�...

在微信小程序web-view中使用Vue.js動態style位移失效的原因分析在使用Vue.js...

在Tampermonkey中如何對多個鏈接進行並發GET請求並依次判斷返回結果?在Tampermonkey腳本中,我們經常需要對多個鏈...


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

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

Dreamweaver CS6
視覺化網頁開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

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