【知识点】JS预编译与做用域链
js运行三部曲:
- 语法检测(通篇扫描,查看是否有语法错误)
- 词法分析(预编译)
- 解释执行
全局预编译过程
- 建立GO(window)对象(Global Object -- 全局执行期上下文)
- 找变量的声明,将形参和变量名做为AO属性名,值为undefined
- 找函数声明,值赋予函数体。
- 注:若是遇到同名的变量会覆盖
函数预编译过程(预编译发生在函数执行以前)
- 建立AO对象(Activation Object -- 函数执行期上下文)
- 找形参和变量的声明,将形参和变量名做为AO属性名,值为undefined
- 将实参值和形参统一。
- 在函数体里面找函数声明,值赋予函数体。
- 注:若是遇到同名的变量会覆盖
当函数执行前会建立AO对象,函数执行完成后会销毁AO对象。
做用域链:每一个AO对象串联起来的链,最后为GO对象
欢迎关注本站公众号,获取更多信息