首頁 > web前端 > js教程 > JavaScript作用域鏈其一:作用域鏈定義

JavaScript作用域鏈其一:作用域鏈定義

黄舟
發布: 2016-12-20 16:16:35
原創
1120 人瀏覽過

一個執行上下文 的資料(變數、函數宣告和函數的形參)作為屬性儲存在變數物件中。變數物件在每次進入上下文時創建,並填入初始值,值的更新出現在程式碼執行階段。

這一章專門討論與執行上下文直接相關的更多細節,這次我們將提及一個議題-作用域鏈。

如果要簡要的描述並展示其重點,那麼作用域鏈大多數與內部函數相關。

我們知道,ECMAScript 允許建立內部函數,我們甚至可以從父函數傳回這些函數。

var x = 10;
  
function foo() { 
  var y = 20; 
  function bar() {
    alert(x + y);
  } 
  return bar; 
}
  
foo()(); // 30
登入後複製

這樣,很明顯每個上下文都有自己的變數物件:對於全域上下文,它是全域物件本身;對於函數,它是活動物件。

作用域鏈正是內部上下文所有變數物件(包括父變數物件)的列表。此鏈用來變數查詢。即在上面的例子中,「bar」上下文的作用域鏈包括AO(bar)、AO(foo)和VO(global)。

但是,讓我們仔細研究這個問題。

讓我們從定義開始,並進深一步的討論範例。

作用域鏈與一個執行上下文相關,變數物件的鏈用於在標識符解析中變數查找。

函數上下文的作用域鏈在函數呼叫時所建立的,包含活動物件和這個函數內部的[[scope]]屬性。下面我們將更詳細的討論一個函數的[[scope]]屬性。

在上下文中示意如下:

activeExecutionContext = {
    VO: {...}, // or AO
    this: thisValue,
    Scope: [ // Scope chain
      // 所有变量对象的列表
      // for identifiers lookup
    ]
};
登入後複製

其scope定義如下:

Scope = AO + [[Scope]]
登入後複製

這種聯合和標識符解析過程,我們將在下面討論,這與函數的生命週期相關。

 以上就是JavaScript作用域鏈其一:作用域鏈定義作用域鏈其一:作用域鏈定義的內容,更多相關內容請關注PHP中文網(www.php.cn)! 


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
JavaScript鉤子函數是什麼?
來自於 1970-01-01 08:00:00
0
0
0
怎麼實作 JavaScript點與圓的位置關係
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板