(18.12.26)
執行環境定義了變數和函式有權訪問的其他資料。每個執行環境都有與之對應的變數物件(variable object),儲存著該環境中定義的所有變數和函式。
全域性執行環境是最外圍的乙個執行環境,在web瀏覽器中,我們可以認為他是window物件,因此所有的全域性變數和函式都是作為window物件的屬性和方法建立的。**載入瀏覽器時,全域性環境被建立,關閉網頁或者關閉瀏覽時全域性環境被銷毀。
每個函式都有自己的執行環境,當執行流進入乙個函式時,函式的環境就被推入乙個環境棧中,當函式執行完畢後,棧將其環境彈出,把控制權返回給之前的執行環境。
var name1 = "tom";
function fn()
fn();
console.log(name1); //tom
console.log(name2); //referenceerror: name2 is not defined
以上就是name1在全域性作用域所以可以在任何地方訪問,name2在區域性作用域,僅可以在函式中訪問。
全域性作用域和區域性作用域中變數的訪問許可權,其實是由作用域鏈決定的。
每進入乙個新的執行環境就會新建乙個用於搜尋函式和屬性的作用域鏈,作用域鏈是函式被建立時的作用域物件集合。作用域鏈可以保證對執行環境有權訪問的屬性和函式有序訪問。
var name1 = "tom";
function outter()
inner();
console.log(name1); //outter-jack
console.log(name2); //tom
}outter();
console.log(name1); //outter-jack
outter的作用域鏈包括二個物件:自己的變數物件----》全域性的變數物件
inner的作用域包括三個物件: 自己的變數物件-----》outter()區域性環境的變數物件-----》全域性環境的變數物件。
當前作用域可以修改上一級作用域的變數資料。
如inner()內name1與name2互換。
理解js作用域鏈 原型鏈
關於global object global object 其實就是 變數物件。當js編譯器開始執行的時候,會初始化乙個global object 來關聯全域性的作用。對於全域性作用域而言,global object j就是variable object.在瀏覽器端 被具象成為window 物件。也...
js 作用域鏈
作用域鏈 作用域鏈就是內部上下文的變數物件vo的列表,作用域鏈用來檢索上下文出現的識別符號,從而保證有序訪問所有變數和函式。乙個作用域鏈包括父級變數物件 variable object 作用域鏈的頂部 函式自身變數vo和活動物件 activation object 當查詢識別符號的時候,會從作用域鏈...
JS作用域和作用域鏈
什麼是js作用域?js作用域也就是js識別變數的範圍 1 全域性作用域 2 區域性作用域 3 e6的塊級作用域 全域性作用域 也就是定義在window下的變數範圍,在任何地方都可以訪問 區域性作用域 是只在函式內部定義的變數範圍 塊級作用域 簡單來說就是用let和const在任意的 塊中定義的變數都...