ES6-執行上下文

執行上下文

每個代碼被調用時,都會產生一個上下文。這裏代碼分爲全局代碼和函數代碼。windows

全局代碼只有一個,會產生全局執行上下文,函數代碼能夠有不少,每個都會產生一個本身的函數執行上下文。函數

全局執行上下文和函數執行上下文

全局執行上下文至關於windows對象,全部的代碼都處於全局執行上下文裏。spa

函數執行上下文是函數內部的空間。那麼就會有疑問,那爲何函數f()裏是全局執行上下文呢?code

每個函數(例如f)執行上下文由兩部分組成:

 f內部定義的變量,arguments,內部定義的函數

 函數f的父級函數的執行上下文

 父級函數:在定義f時,把直接f包起來的那個函數。若是f外層沒有函數,則父級函數就理解全局代碼。
複製代碼

當有函數嵌套時,就會造成函數執行上下文棧,這個棧的原則是後入先出,最裏層的函數先出棧,裏層棧能夠調用外層棧的數據。cdn

執行上下文中保存數據,由兩部分組成,1是本身定義的變量,2是父級函數的執行上下文。
 對於全局代碼來講,就只有第一部分:本身定義的變量,也就是全局變量。
 執行上下文去調用數據,先在本身定義的變量中找,找不到,就去父級函數的執行上下文去找,若是還找不到,會報錯。
複製代碼

照此理解,爲何函數內部的變量函數外面不能調用呢?對象

那是由於函數內部的變量屬於函數執行上下文。
  當全局執行上下文尋找這個變量時,它只會在本身的執行上下文裏去尋找,並不能去函數執行上下文中找,一樣的,外層函數執行上下文也不能去內層函數執行上下文裏尋找數據。複製代碼
相關文章
相關標籤/搜索