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函数(声明不用管 调用的时候才会执行)
2 创建fa的EC 拷贝父函数的作用域链 函数调用时 生成AO 将AO压入栈顶
当函数调用的时候就会增加计数 调用fa函数
3 创建fb的EC 拷贝父函数的作用域链 函数调用时 生成AO 将AO压入栈顶
4 fb 执行完成 fb的执行坏境就会被销毁 scope就会被销毁 不在调用fb函数 fb的AO的引用次数次数由1变为0 fa的AO的引用次数次数由2变为1 此时fa还没有被销毁 所以fb会销毁
5 fa 执行完成 fa的执行环境被摧毁 不在调用fa函数
fa的引用次数由1变为0 所以就会销毁
6执行完成
上一篇: JavaScript作用域链
下一篇: JavaScript作用域链