# 變量對象
變量對象是與執行上下文相關的數據作用域,存儲了在上下文中定義的變量和函數聲明。
全局上下文中的變量對象就是全局對象
## 函數上下文
在函數上下文中,我們用活動對象(activation object, AO)來表示變量對象。
只有到當進入一個執行上下文中,這個執行上下文的變量對象才會被激活,所以才叫 activation object 吶,而只有被激活的變量對象,也就是活動對象上的各種屬性才能被訪問。
## 執行過程
執行上下文的代碼會分成兩個階段進行處理:分析和執行,我們也可以叫做:
1. 進入執行上下文
2. 代碼執行
### 進入執行上下文
當進入執行上下文時,這時候還沒有執行代碼,
變量對象會包括:
1. 函數的所有形參 (如果是函數上下文)
* 由名稱和對應值組成的一個變量對象的屬性被創建
* 沒有實參,屬性值設為 undefined
2. 函數聲明
* 由名稱和對應值(函數對象(function-object))組成一個變量對象的屬性被創建
* 如果變量對象已經存在相同名稱的屬性,則完全替換這個屬性
3. 變量聲明
* 由名稱和對應值(undefined)組成一個變量對象的屬性被創建;
* 如果變量名稱跟已經聲明的形式參數或函數相同,則變量聲明不會干擾已經存在的這類屬性
例如
```
function foo(a) {
var b = 2;
function c() {}
var d = function() {};
b = 3;
}
foo(1);
```
在進入執行上下文后,這時候的 AO 是:
```
AO = {
arguments : {
0: 1,
length: 1
},
a: 1,
b: undefined,
c: reference to function c(){},
d: undefined
}
```
### 代碼執行
在代碼執行階段,會順序執行代碼,根據代碼,修改變量對象的值
還是上面的例子,當代碼執行完后,這時候的 AO 是:
```
AO = {
arguments : {
0: 1,
length: 1****
},
a: 1,
b: 3,
c: reference to function c(){},
d: reference to FunctionExpression "d"
}
```
到這里變量對象的創建過程就介紹完了,讓我們簡潔的總結我們上述所說:
1. 全局上下文的變量對象初始化是全局對象
2. 函數上下文的變量對象初始化只包括 Arguments 對象
3. 在進入執行上下文時會給變量對象添加形參、函數聲明、變量聲明等初始的屬性值
4. 在代碼執行階段,會再次修改變量對象的屬性值
```
console.log(foo);
function foo(){
console.log("foo");
}
var foo = 1;
```
會打印函數,而不是 undefined 。
**這是因為在進入執行上下文時,首先會處理函數聲明,其次會處理變量聲明,如果如果變量名稱跟已經聲明的形式參數或函數相同,則變量聲明不會干擾已經存在的這類屬性。**
- 筆記內容來源
- 你不知道的JavaScript上
- vue
- 環境搭建
- node和npm安裝配置
- 安裝vue-cli并初始化vue項目
- 安裝配置elementUI
- vuex安裝配置
- axios安裝配置
- main.js
- vue基礎入門
- vue-router介紹
- vuex
- vue 原理學習源碼學習
- js正則處理v-bind和語法
- 雙向綁定
- 虛擬dom
- mvvm和render函數
- vue工作項目筆記
- elementUI 表格分頁多選記憶功能
- elementUI表格展開一行
- keepAlive
- vue整合ckeditor5
- this.$router.push 內打開新窗口
- java修改上傳圖片的權限
- 兼容ie11
- 生成二維碼
- base64圖片下載(兼容IE10)
- vue新手引導程序intro.js
- vue插件 devtools
- vue刷新當前頁面
- vue 錨點導航
- axios
- axios與springmvc
- vue-cli 3搭建vue
- git
- git常用命令
- 正則表達式
- 實例demo
- 1
- 新手引導頁
- 純css3從左顯示下劃線動畫導航菜單
- 純css3從中間顯示下劃線動畫導航菜單
- css顯示密碼
- 倒計時時鐘
- 星星評分
- 按鈕懸停效果
- 步驟條
- css動畫按鈕
- input標題獲得焦點上移
- css圖片放大
- css鏡像導航欄
- js
- 通信
- for in 和 for of
- 前端安全問題
- Promise
- 掘金冴羽學習筆記
- 模擬call
- 模擬bind
- 閉包
- 1 作用域
- 2 執行上下文棧
- 3 變量對象
- 4 作用域鏈
- 5 this
- 面向對象
- 基礎知識點
- 渲染機制
- 其他
- 判斷是否為數組
- http
- css
- 基礎知識
- css陰影