JavaScript 核心觀念(5)-執行環境(Execution context)與執行堆疊(Execution stack)

 嗨,大家今天開心嗎?

我是Kris,持續發筆記來到了第六篇,有慢慢習慣這個方式來幫助自己釐清觀念

可以在上課以後再進行複習一次,加深印象,有感受到自己在慢慢進步。

持之以恆,加油!


今天要來講執行環境&執行堆疊,這也是面試考題裡很常出的觀念題目哦!


執行環境(Execution context)

函式的作用域是限制在function內 (變數可以使用的範圍)

但是如果沒有執行函式的話是不會有任何變數產生的!

執行以後會產生一個執行環境以及限制作用域的功能。


函式撰寫時就確定作用域,執行它才能產生執行環境,這個執行環境才有屬於它的變數跟this。

this會隨著不同的執行環境改變(後面課程會再詳細介紹this)

*函式呼叫以後才會產生執行環境,反覆呼叫就會一直產生新的執行環境*

函式宣告的變數,只在函式內能被讀取,包括宣告在函式內的函式!!*


global全域也有自己的全域執行環境

網頁一開啟 or 後端Node.js 一開啟,就會建立全域執行環境

同時會產生全域變數→ 瀏覽器:window;Node.js:global

也會有全域執行環境的this,內容會等於window或是global。



執行堆疊 Execution stack

用執行的順序來堆疊,跟函式宣告的順序沒有關係。

就是JS執行以後,哪個函式先運行,後運行的就一層一層向上堆疊,可以更加瞭解JS是如何運行的。

以下程式碼來當範例

 

網頁一開起就會建立全域執行環境
然後這段codec會先執行doSomething() → sayHi()
所以執行堆疊的順序如下方影片所示
3.sayHi()執行環境  A
2.doSomething()執行環境  B
1.全域執行環境
照數字123順序執行堆疊,照英文字母ABC離開執行環境,最後回到全域執行環境。



補充說明

如何用chrome開發者工具看執行堆疊以及目前作用域

開啟chrome → 執行程式 → 按下F12開啟開發者工具 → 點選console旁邊的sources頁籤 → 按下暫停鍵⏸️ → 按下F5重整網頁 → 按下一步逐步觀察JS執行堆疊跟作用域的變化。

call Stack:執行堆疊;Scope:目前作用域;(anonymous):代表全域執行環境

*在程式碼呼叫doSomething();的上一行加入debugger,可強制停在doSomething執行前。如果網頁無法按照上方說明逐步觀察時可使用這個方法。 debugger不用括號跟分號


今天就到這邊告一段落,會持續更新上課筆記,如果有錯誤的地方可以下面留言告訴我。

感謝各位,祝大家都能抵達你的心之所向🙌🙌🙌


评论

此博客中的热门博文

JavaScript 核心觀念(6)-執行環境與作用域-範圍鍊

JavaScript 核心觀念(3)-的語法作用域(Lexical scope)