深刻理解javascript原型和閉包(9)——簡述【執行上下文】下

繼續上一篇文章(http://www.cnblogs.com/wangfupeng1988/p/3986420.html)的內容。javascript

上一篇咱們講到在全局環境下的代碼段中,執行上下文環境中有如何數據:html

  • 變量、函數表達式——變量聲明,默認賦值爲undefined;
  • this——賦值;
  • 函數聲明——賦值;

 

若是在函數中,除了以上數據以外,還會有其餘數據。先看如下代碼:前端

以上代碼展現了在函數體的語句執行以前,arguments變量和函數的參數都已經被賦值。從這裏能夠看出,函數每被調用一次,都會產生一個新的執行上下文環境。由於不一樣的調用可能就會有不一樣的參數。java

 

另一點不一樣在於,函數在定義的時候(不是調用的時候),就已經肯定了函數體內部自由變量的做用域。至於「自由變量」和「做用域」是後面要專門拿出來說述的重點,這裏就先點到爲止。用一個例子說明一下:web

 

好了,總結完了函數的附加內容,咱們就此要全面總結一下上下文環境的數據內容。面試

全局代碼的上下文環境數據內容爲:json

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

如: var a = 10;app

聲明(默認賦值爲undefined)webapp

函數聲明,

如: function fn() { }

賦值

this

賦值

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

參數

賦值

arguments

賦值

自由變量的取值做用域

賦值

給執行上下文環境下一個通俗的定義——在執行代碼以前,把將要用到的全部的變量都事先拿出來,有的直接賦值了,有的先用undefined佔個空

 

瞭解了執行上下文環境中的數據信息,你就不用再去死記硬背那些可惡的面試題了。理解了就不用背誦!

 

講完了上下文環境,又來了新的問題——在執行js代碼時,會有數不清的函數調用次數,會產生許多個上下文環境。這麼多上下文環境該如何管理,以及如何銷燬而釋放內存呢?下一節將經過「執行上下文棧」來解釋這個問題。

 

不過彆着急,在解釋「執行上下文棧」以前,還須要把this說一下,this仍是挺重要的。

說完this,接着說執行上下文棧。

---------------------------------------------------------------------------

本文已更新到《深刻理解javascript原型和閉包系列》的目錄,更多內容可參見《深刻理解javascript原型和閉包系列》。

另外,歡迎關注個人微博

學習做者教程:《前端JS高級面試》《前端JS基礎面試題》《React.js模擬大衆點評webapp》《zepto設計與源碼分析》《json2.js源碼解讀

相關文章
相關標籤/搜索