闭包,作用域,作用域链
全局变量:可以在任何地方反复使用的变量,但可能会造成全局污染
局部变量:不可以重复使用,只在函数中使用
闭包:优点:可重用变量,又可以保护变量不受污染的机制
缺点:比一般的函数更占用内存
闭包流程图片
- 闭包准备阶段
完成外层循环调用
- 调用内层循环
3.再次调用内层循环
4.调用结束后
作用域:变量的可用范围
- 全局作用域window
包含全局变量
- 局部作用域
包含局部变量,在函数体内,局部变量的优先级高于同名的全局变量。
函数生命周期:
1. 开始执行前(生命提前阶段)
创建执行环境栈(数组):临时保存正在执行的函数的执行环境
向执行环境中添加第一个默认程序main(),该方法创建出一个全局作用域的对象window
2.定义函数时
创建函数对象,封装函数的定义
声明函数变量,引起了函数对象,函数对象的scope属性引用回,创建函数时的作用域
3.调用函数时
在ECS中加入一个新的元素并记录新函数的调用
创建一个活动对象,保存本次调用用到的局部变量
ECS中的新执行环境元素引用活动对象
活动对象中的parent属性引用函数的scope指向副局作用域对象
(前提是活动作用域中没有局部变量,才沿着parent向父级作用域找)
4. 调用函数后
执行环境栈中本次函数的执行环境出栈
导致活动对象被释放,导致局变量一同释放
作用域链
右多级作用域连续引用形成的链式结果
掌握一切变量的使用顺序 :先在局部照,没有则延作用域链向父级作用域中找