欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaScript作用域链

程序员文章站 2024-02-17 16:36:16
...

执行坏境,定义了执行期间可以访问的变量和函数

    全局执行环境
        Global Object(windows)
        从见到JS代码开始创建
        到网页关闭时销毁

    函数执行环境
        Activion Object
        从函数调用开始创建
        到函数调用结束时( 函数调用的时候就会增加计数 当计数不增加的话 就会销毁)


    作用域[[scope]],每一个函数都有
    作用域是私有属性,只能由Js引擎访问
    作用域链,是AO和GO构成的链
    所谓执行坏境,就是根据作用域依次查找变量和函数
    找到即停
    全部找完无果,报错
    作用域链每个函数都有



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

1 创建全局变量(脚本 Global EC 是一个对象)
对象里面有一个成员叫做scope chain 相当于数组 指向GO
GO这个对象初始化了 this类 g变量(赋值不放在里面) fa函数(声明不用管 调用的时候才会执行)
JavaScript作用域链
2 创建fa的EC 拷贝父函数的作用域链 函数调用时 生成AO 将AO压入栈顶
当函数调用的时候就会增加计数 调用fa函数
JavaScript作用域链
3 创建fb的EC 拷贝父函数的作用域链 函数调用时 生成AO 将AO压入栈顶
JavaScript作用域链
4 fb 执行完成 fb的执行坏境就会被销毁 scope就会被销毁 不在调用fb函数 fb的AO的引用次数次数由1变为0 fa的AO的引用次数次数由2变为1 此时fa还没有被销毁 所以fb会销毁
JavaScript作用域链
5 fa 执行完成 fa的执行环境被摧毁 不在调用fa函数
fa的引用次数由1变为0 所以就会销毁
JavaScript作用域链
6执行完成
JavaScript作用域链

相关标签: JS