參考原文:執行上下文javascript
一、每個執行上下文,工做分爲三個階段:html
準備階段–>執行階段–>調用階段java
準備階段:代碼執行以前,設置數據,至關於初始化。函數
執行階段:開始執行每一行代碼。this
調用階段:可能沒有。若是有函數調用,產生新的執行上下文。函數每被調用一次,都會產生一個新的執行上下文環境。spa
二、代碼段htm
javascript在執行一個代碼段以前,都會進行「準備工做」來生成執行上下文。這個「代碼段」其實分三種狀況——全局代碼,函數體,eval代碼。blog
函數體是代碼段是由於函數在建立時,本質上是 new Function(…) 得來的,其中須要傳入一個文本形式的參數做爲函數體。ip
三、準備工做ci
準備工做階段,全局代碼的上下文環境數據內容爲:
普通變量(包括函數表達式),
如: var a = 10; |
聲明(默認賦值爲undefined) |
函數聲明,
如: function fn() { } |
賦值 |
this | 賦值 |
若是代碼段是函數體,那麼在此基礎上須要附加:
參數 | 賦值 |
arguments | 賦值 |
自由變量的取值做用域 | 賦值 |
四、「函數表達式」和「函數聲明」
雖然二者都很經常使用,可是這二者在「準備工做」時,倒是兩種待遇。