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,可強制停在doSo