作用域链
作用域链: 作用域(AO(Activation object (执行期上下文)), 全局作用域(GO)
javascript是一种解释性语言,它执行之前会先进行语法分析,然后是预编译,最后解释执行,而AO链是在预编译过程产生。
JS运行三部曲:
- 语法解析——检查有无语法错误;
- 预编译;
- 解释执行——将 js 翻译成计算机识别的语言(0 和 1组成的),翻译一行执行一行,每一次执行完毕后,不被引用的变量就会被销毁.
js 预编译过程步骤:
1、先创建 GO 、AO对象(即作用域)。
2、找到变量 、形参都赋值为undefind。
3、实参赋值给形参。
4、在函数体里面找函数声明,值赋予函数体(所以函数会覆盖形参和变量)。
闭包是因为变量没被销毁 ,变量的AO和GO还存在,所以能获取到没被销毁的变量。(js的销毁机制:在函数的功能体中,每一次执行完毕后,不被引用的变量就会被销毁)。