作用域链和闭包

                                              作用域链和闭包

一.作用域链:Scope Chain

    1. 作用域:
        函数作用域[[scope]]:外部对内部可见;内部对外部不可见;内部优先
        JS中只有函数级别的作用域,没有块级别的作用域;换句话说,只有在进入或者退出函数的时候,作用域会发生变化

    2. 执行环境(EC)和作用域链
            执行环境,定义了执行期间可以访问的变量和函数。
            全局执行环境:
                                Global Object(window)
                                从见到JS代码开始创建
                                到网页关闭时销毁
            函数执行环境
                                Activation Object
                                从函数调用开始创建
                                到函数调用结束时销毁
        作用域[[scope]],每个函数都有
        作用域是私有属性,只能由JS引擎访问
        作用域链,是AO和GO构成的链
        所谓执行环境,就是根据作用域链依次查找变量和函数:找到即停;全部找完无果,报错
        作用域链每个函数都有

    3. 生成作用域链: 
        每个函数在定义(函数声明\函数表达式)时会拷贝其父亲函数的作用域链
        在函数被调用时,生成AO然后将AO压入作用域链的栈顶

    4. 作用域链的应用:
        效率:尽量少使用靠近上层的变量,多使用自己的局部变量
        重名,容易出错:尽量减少不同层次函数使用相同的变量名;避免函数名与变量名一样
        函数退出以后AO是否一定被释放?不一定

二. 闭包:函数的AO通过scope chain 相互连接起来,使得函数体内的变量都可以保存在函数的AO,这样的特性称为“闭包”。

        1.闭包的危险:
              会造成原有AO不释放,产生内存泄漏
        2.闭包的应用:
              实现公有变量
              缓存存储结构
              封装,实现属性私有化
              模块化开发

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值