執行上下文
1.代碼分類(位置)
全局代碼
函數(局部代碼)
2.全局執行上下文
在執行全局代碼前提早將window肯定爲全局執行上下文
對全局數據進行預處理
var 定義的全局變量==>undefined,添加爲window的屬性
functions聲明的全局函數==>賦值(fun),添加爲window的方法
this==>賦值(window)
開始執行全局代碼
3.函數執行上下文(局部)
在調用函數,準備執行函數以前,建立對應的函數執行上下文對象(虛擬 放在棧內存裏面)
對局部變量數據進行預處理
形參變量==>賦值(實參)==>添加爲執行上下文的屬性
arguments==>賦值(實參列表),添加爲執行上下文的屬性
var定義的局部變量==>undefined,添加爲執行上下文的屬性
function聲明的函數==>賦值(fun),添加爲執行上下的方法
this==>賦值(調用函數的對象)
開始執行函數體代碼
執行上下文棧
1.在全局代碼執行前,js引擎就會建立一個棧來存儲管理全部的執行上下文對象
2.在全局執行上下文(windows)肯定後,將其添加到棧中(壓棧)
3.在函數執行上下文建立後,將其添加到棧中(壓棧)
4.在當前函數執行完成後,將棧頂的對象移除(出棧)
5.當全部的代碼執行完成後,棧中只剩下window.windows