作用域和作用域链详解

1. *****作用域和作用域链


   作用域scope: 
     什么是: 一个变量的使用范围——使用
                 本质上作用域是一个对象——存储
                     作用域中的变量都是对象的成员
     程序/函数的执行过程: 
        1. 开始执行程序前:
            创建ECS(执行环境栈): 
                依次保存每个调用的函数的执行环境
            在ECS中压入第一个全局执行环境(全局EC)
            创建window对象,全局EC引用window对象
            window就是全局作用域对象
        2. 开始执行程序:
            所有全局变量都保存在全局作用域对象window中
        3. 定义函数时:
            在全局添加函数名变量
            创建函数对象封装函数定义
            函数名变量引用函数对象
            函数对象中有一个scope属性,引用回创建函数时的作用域对象。通常都是window。
        4. 调用函数时:
            在ECS中压入一个新的EC
            为本次函数调用创建专门的活动对象(AO)
            在AO中创建所有函数定义中规定的局部变量
            其实AO就是函数作用域对象
                 所有局部变量都是AO的成员
            新的EC引用活动对象AO
            AO的parent指向window
            变量的使用顺序: 
               先用AO(函数作用域)中的局部变量
               如果AO中没有,才去window(全局作用域)中找
        5. 函数调用后:
            本次函数调用的EC出栈
                导致函数作用域对象AO释放
                       导致局部变量一同释放
   作用域链(scope chain): 由多个作用域对象连续引用形成的链式结构。
      顺序: 先函数作用域对象AO->全局作用域对象window
      所有的变量都保存在作用域链上的对象中
          局部变量都保存在函数作用域对象AO中
          全局变量都保存在全局作用域对象window中
      控制了: 变量的使用顺序
        先用AO(函数作用域)中的局部变量
               如果AO中没有,才去window(全局作用域)中找

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值