在 JavaScript 中,函数执行过程中会涉及到一个名称叫变量对象。
变量对象是当前代码块中,所有变量(变量、函数、形参、arguments类数组对象)组成的一个对象
变量对象是在执行上下文中被激活的,只有变量对象被激活了,在这段代码中才能使用所有的变量
变量对象分为全局变量对象和局部变量对象
全局变量对象简称为 Variable Object VO
函数由于执行才能被激活称为 Active Object AO
具体来说,以下是一些常见的变量和函数声明,它们会被添加到 VO 中:
变量声明:使用 var 或 let 关键字声明的变量
函数声明:使用 function 关键字定义的函数
形参:函数定义时声明的参数
arguments: 函数的参数的类数组对象
AO 和 VO 的区别在于它们的创建时机不同。VO 是在函数被调用时创建的,而 AO 是在函数执行时创建的。在 AO 中,存储的变量和函数声明和 VO 中是一样的,但它们的值可能会发生变化。在函数执行时,变量的值会被更新,函数声明会被重新定义。
通过下面代码和图示例的结合:
var value = 1
function foo() {
console.log(value)
}
function bar() {
var value = 2
foo()
}
bar()
在上面这段代码中,VO 和 AO 示例图如下: