JS执行上下文与变量对象

###从执行上下文环境说起
在JavaScript中,平时不可避免的需要我们声明变量和函数,那么在JS解析器中如何这些变量进行操作的了,一切还得从执行下上文中说起。当我们调用一个函数时,一个新的执行上下文就会被创建,而执行上下文的周期可以分成两个阶段:创建阶段、执行阶段

这里不对建立作用域链和确定this指向展开说,下面主要写变量对象

变量对象(Variable Object)

变量对象的创建过程如下:

  1. 建立arguments对象
  2. 检查当前上下文的函数声明(function关键字声明创建的属性)
  3. 检查var变量声明的创建属性

依据上面的规则可以知道function声明比var声明优先级要高一些,下面举一个例子

function test(){
    console.log(foo);  //hello
    console.log(bar);  //undefine

    var foo = 'Hello';
    console.log(foo);  //Hello

    var bar = function(){
        return 'world';
    }
    function foo(){
        return 'hello';
    }

}
test();

这里我们可以依据执行上下文的阶段来将变量对象分为创建阶段和执行阶段:

//创建阶段VO
VO = {
    arguments:{...},
    foo:<foo reference>, //表示foo的地址引用
    bar:undefined        //var bar;
}

//执行阶段
AO = {
    arguments;{...},
    foo:'Hello',
    bar:<bar reference>
}

在执行阶段,变量对象(VO)转换为了活动对象(AO),里面的属性都可以访问,然后开始执行阶段的操作.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值