javascript 變數物件
每個執行上下文會包含三個重要屬性,分別是變數物件(Variable Object,VO)、作用域鏈(Scope Chain)和 this 指向。
本篇主要詳細介紹變數物件的生成過程。
我們已經知道,在執行上下文的建立階段會生成變數物件,生成變數物件主要有以下三個過程:
檢索當前上下文中的引數。該過程生成 arguments 物件,建立以形參變數名為屬性名,形參變數值為屬性值的屬性;
檢索當前上下文中的函式宣告。該過程建立以函式名為屬性名,函式所在記憶體地址引用為屬性值的屬性;
檢索當前上下文中的變數宣告。該過程建立以變數名為屬性名,undefined 為屬性值的屬性(如果變數名跟已宣告的形參變數名或函式名相同,則該變數宣告不會干擾已經存在的這類屬性)。
我們可以透過以下虛擬碼來表示變數物件
VO={ Arguments:{}, Param_Variable:具體值, //形參變數 Function:, Variable:undefined },
當執行上下文進入執行階段後,變數物件會變為活動物件(Active Object,AO)。此時原先宣告的變數會被賦值。變數物件和活動物件都是指同一個物件,只是處於執行上下文的不同階段。
我們可以透過以下虛擬碼來表示活動物件
AO={ Arguments:{}, Param_Variable:具體值, //形參變數 Function:, Variable:具體值 },
舉個例子~
假設有一個 javascript 檔案中包含如下程式碼
function fn1(a) { var b = 1; function fn2() {} var c = function() {}; } fn1(0);
當 fn1 函式被呼叫時,fn1 執行上下文被建立(建立階段),其變數物件如下所示
fn1Context={ VO={ Arguments:{ 0:0, length:1 }, a:0, b:undefined, fn2:, c:undefined } }
在 fn1 函式上下文的執行階段,變數物件變為活動物件,原先宣告的變數會被賦值,其活動物件如下所示
fn1Context={ AO={ Arguments:{ 0:0, length:1 }, a:0, b:1, fn2:, c: , } }
對於全域性上下文來說,由於其不會有引數傳遞,所以在生成變數物件的過程中只有檢索當前上下文中的函式宣告和檢索當前上下文中的變數宣告兩個步驟。
在全域性上下文中的變數物件(即全域性物件)是我們熟悉的 window,透過該物件可以使用其預定義的變數和函式,在全域性環境中所宣告的變數和函式,也會成為全域性物件的屬性。
作者:淘淘笙悅
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2001/viewspace-2813738/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JavaScript之變數物件JavaScript變數物件
- JavaScript深入之變數物件JavaScript變數物件
- JavaScript 深入之變數物件JavaScript變數物件
- Javascript 物件 – 數學物件JavaScript物件
- 深入理解javascript系列(五):變數物件(VO)2JavaScript變數物件
- 深入理解javascript系列(四):變數物件(VO)1JavaScript變數物件
- JavaScript變數JavaScript變數
- Java物件及物件引用變數Java物件變數
- javascript 將變數值作為物件屬性 獲取物件對應的值JavaScript變數物件
- JavaScript變數提升JavaScript變數
- JavaScript 宣告變數JavaScript變數
- javaScript的變數JavaScript變數
- JavaScript 變數汙染JavaScript變數
- 類,物件,成員變數和區域性變數,匿名物件物件變數
- 物件呼叫動態變數物件變數
- javascript變數物件函式呼叫棧作用域閉包等細解!JavaScript變數物件函式
- JavaScript —— 區域性變數和全域性變數JavaScript變數
- JavaScript 3/30: CSS變數JavaScriptCSS變數
- Javascript 變數生命週期JavaScript變數
- 關於JavaScript變數提升JavaScript變數
- JavaScript - 變數、值、型別JavaScript變數型別
- JavaScript基礎(二)變數JavaScript變數
- javascript棄坑之路-搞定執行環境物件、變數訪問和作用域JavaScript物件變數
- 變數物件與作用域鏈變數物件
- JavaScript進階-執行上下文棧和變數物件(一週一更)JavaScript變數物件
- JavaScript五:全域性變數&區域性變數;運算子JavaScript變數
- JavaScript兩個變數交換值(不使用臨時變數)JavaScript變數
- JavaScript 函式引數解構物件JavaScript函式物件
- Javascript 函式和變數提升JavaScript函式變數
- [譯] JavaScript 中的私有變數JavaScript變數
- JavaScript中變數和作用域JavaScript變數
- JavaScript中的安全變數引用JavaScript變數
- JavaScript之變數及作用域JavaScript變數
- JavaScript筆記3_變數JavaScript筆記變數
- JavaScript 回顧學習:變數JavaScript變數
- javascript 變數簡單介紹JavaScript變數
- JavaScript--變數和運算子JavaScript變數
- JavaScript變數作用域之殤JavaScript變數