js執行環境總結

1. 執行上下文:

Execution Content:函數執行前的準備工做git

2. JS執行環境

* 全局做用域
* 函數做用域
* eval做用域(不推薦使用eval,暫時忽略)
* 塊級做用域 ES6新增
複製代碼

3. JS是如何管理執行上下文?

經過棧(先進後出,後進先出的一種數據結構)的存取方式管理,稱爲"執行棧"或"調用棧"github

4. 函數調用棧

js執行 最早進入全局環境,因此處於"棧底的永遠是全局環境的執行上下文",出於"棧頂的是當前正在執行函數的執行上下文",當函數調用完成後,它就會從棧頂被推出去(出棧,閉包會阻止)數據結構

注意: 全局環境只有一個,對應的全局執行上下文也只有一個,只有當頁面被關閉以後它纔會從執行棧出棧,不然一直存在於棧底閉包

5. 執行上下文的生命週期

1.建立階段: 函數被調用時,進入函數環境,建立執行上下文。
2.執行階段: 函數中的代碼執行時,執行上下文進入執行階段


建立階段:
        1. 建立變量對象 
            
            1.1 Arguments 對象(已賦值)
            1.2 函數聲明 (已賦值)
            1.3 變量聲明,函數表達式聲明(未賦值)
            
        2. 肯定this (調用者肯定)
        
        3. 肯定做用域(詞法環境決定)
        
執行階段:
        1. 變量對象賦值
        
            1.1 變量賦值
            1.2 函數表達式賦值
        
        2. 調用函數
        
        3. 順序執行其餘代碼
複製代碼

6. 變量對象和活動對象的區別?:

當進入到一個執行上下文後,這個變量對象纔會被激活,因此叫活動對象(AO),這時候活動對象上的各類屬性才能被訪問。函數

注意:建立階段對函數聲明作賦值,變量及函數表達式僅作聲明,真正的賦值操做要等到行上下文代碼執行階段this

7.執行上下文的數量限制(堆棧溢出)

原文連接spa

相關文章
相關標籤/搜索