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是如何運行的。
以下程式碼來當範例
如何用chrome開發者工具看執行堆疊以及目前作用域
開啟chrome → 執行程式 → 按下F12開啟開發者工具 → 點選console旁邊的sources頁籤 → 按下暫停鍵⏸️ → 按下F5重整網頁 → 按下一步逐步觀察JS執行堆疊跟作用域的變化。
call Stack:執行堆疊;Scope:目前作用域;(anonymous):代表全域執行環境
*在程式碼呼叫doSomething();的上一行加入debugger,可強制停在doSomething執行前。如果網頁無法按照上方說明逐步觀察時可使用這個方法。 debugger不用括號跟分號
今天就到這邊告一段落,會持續更新上課筆記,如果有錯誤的地方可以下面留言告訴我。
感謝各位,祝大家都能抵達你的心之所向🙌🙌🙌
评论
发表评论