函数作用域

预编译

函数声明整体提升

变量声明提升 如 var a=10 分为两步:首先变量声明var a,接着 给a赋值,a=10

注意:暗示全局变量imply global,—–任何变量未经声明就赋值,此变量为全局变量所有

      一切声明的全局变量,全是window对象属性

      window就是全局

预编译有五步:

1、首先创建GO(global object)对象===window对象

2、创建AO(activation object)(执行期上下文)对象

3、找形参和变量声明,将形参和变量名作为AO属性名,值为undefined

4、将实参与形参统一

5、找函数声明,值赋予函数体

例1:

function test() {
        console.log(b);//undefined
        if (a){//a:undefined,所以var b=100不执行
            var b=100;
        }
        console.log(b);//undefined
        c=234;//暗示全局变量
        console.log(c);//234  AO没有再找GO
    }
    var a;
    test();
    a=10;
    console.log(c);//234

GO(全局对象){

a:undefined

test:function test(){}

c:undefined

}

test()执行产生执行期上下文AO

AO(活动对象){

a:undefined

b:undefined

}

作用域

存储了执行期上下文的集合

例2

    function a() {
        function b() {
            var b=234;
        }
        b();
        var a;
    }
    a();
    var glob=123;

a.[[scope]]存a的作用域

a()定义第0位存GO,接着a()执行,第0位存a的AOa,第1位存GO

在a函数里,b定义,保存a的作用域链,接着b执行,产生b的AOb,堆栈到作用域里

注意:a执行b才能定义

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值