【深刻理解javascript】執行上下文

參考原文:執行上下文javascript

一、每個執行上下文,工做分爲三個階段:html

準備階段–>執行階段–>調用階段java

準備階段:代碼執行以前,設置數據,至關於初始化。函數

執行階段:開始執行每一行代碼。this

調用階段:可能沒有。若是有函數調用,產生新的執行上下文。函數每被調用一次,都會產生一個新的執行上下文環境。spa

二、代碼段htm

javascript在執行一個代碼段以前,都會進行「準備工做」來生成執行上下文。這個「代碼段」其實分三種狀況——全局代碼,函數體,eval代碼。blog

  • 全局代碼是一種,這個應該沒有非議,原本就是手寫文本到<script>標籤裏面的。

  • eval代碼接收的也是一段文本形式的代碼。(eval不經常使用,也不推薦你們用)

函數體是代碼段是由於函數在建立時,本質上是 new Function(…) 得來的,其中須要傳入一個文本形式的參數做爲函數體。ip

三、準備工做ci

準備工做階段,全局代碼的上下文環境數據內容爲:

普通變量(包括函數表達式),

 

如: var a = 10;

聲明(默認賦值爲undefined)
函數聲明,

 

如: function fn() { }

賦值
this 賦值

若是代碼段是函數體,那麼在此基礎上須要附加:

參數 賦值
arguments 賦值
自由變量的取值做用域 賦值

四、「函數表達式」和「函數聲明」

雖然二者都很經常使用,可是這二者在「準備工做」時,倒是兩種待遇。

相關文章
相關標籤/搜索