tips:
若是發現文中有描述不許確的地方,請必定要在評論區留言告知,十分感謝!
若是本篇文章對你有所幫助,還請幫忙點個贊,你的點贊對我來講是莫大的鼓勵!
github blog: https://github.com/jeuino/Blo...
在上篇文章《JavaScript 之詞法分析和語法分析》中,咱們介紹了詞法分析和語法分析的基本概念。本篇文章將繼續講解什麼是執行上下文。前端
可能有的讀者會疑惑,預編譯階段和執行代碼階段與執行上下文是什麼關係?這個問題會在講解執行上下文的生命週期時作出解釋。敬請期待《JavaScript 之執行上下文的生命週期》
執行上下文(Execution Context),也稱爲執行環境,就是當前 JavaScript 代碼執行時所在環境的抽象概念,能夠理解爲當前代碼的運行環境。git
在 JavaScript 中,執行環境主要分爲:github
在一個 JavaScript 程序中,一般狀況下都會存在多個執行上下文,由於一個 JavaScript 文件中可能聲明瞭多個函數。當多個函數被調用時,就會建立多個執行上下文,那麼這些執行上下文是如何管理的呢?segmentfault
JavaScript 引擎建立了執行上下文棧(Execution Context Stack)(也被稱爲函數調用棧) 來管理執行上下文。數組
首先咱們來了解下什麼是棧數據結構?瀏覽器
棧中數據的存取方式相似給槍上子彈,先上的子彈最後打出,後上的子彈先打出。
特色:先進後出,後進先出數據結構
理解了棧數據結構,咱們繼續來講執行上下文棧是如何管理執行上下文的?函數
咱們用數組來模擬執行上下文棧的行爲:ECStack = [];
。ui
function fn2() { console.log('fn2') } function fn1() { console.log('fn1') fn2(); } fn1();
分析上述這段代碼在執行過程當中,執行上下文棧的行爲是什麼樣的:this
ECStack.push(global_EC);
ECStack.push(fn1_EC);
ECStack.push(fn2_EC);
ECStack.pop();
ECStack.pop();
ECStack.pop();
總結:
在每一個執行上下文中,都包括三個重要的屬性:
下篇文章將繼續介紹執行上下文中的變量對象,敬請期待。
參考文章:
JavaScript深刻之執行上下文
前端基礎進階(二):執行上下文詳細圖解
JS 執行環境、做用域鏈、活動對象