1.程序加载时:
创建函数执行栈(ECS):保存函数执行顺序的数组
首先压入全局执行环境(全局EC)
全局EC引用着全局对象window
window中保存着全局变量
2.定义函数时:
创建函数对象:封装代码段
在函数中有一个scope(作用域)对象:记录着函数的作用域来自哪里
全局函数的scope对象都是window
3.调用前:
在执行环境栈(ECS)压入新的EC(函数的EC)
创建活动对象(AO):保存着本次函数调用时用到的局部变量
在函数的EC中有一个scope chain(作用域链)属性引用着AO
AO中有个parent属性是scope引用对象
4.调用时:
正是有了前三步,我们才有了变量的使用规则:先使用局部变量,局部没有找全局,全局没有就报错
5.调用完:
函数的EC会出栈,没人引用AO,AO会自动释放,所以局部变量也就自动释放了
(图片引用自授课老师 - 袍哥)