【知识点】JS预编译与做用域链

js运行三部曲:

  1. 语法检测(通篇扫描,查看是否有语法错误)
  2. 词法分析(预编译)
  3. 解释执行

全局预编译过程

  1. 建立GO(window)对象(Global Object -- 全局执行期上下文)
  2. 找变量的声明,将形参和变量名做为AO属性名,值为undefined
  3. 找函数声明,值赋予函数体。
  4. 注:若是遇到同名的变量会覆盖

函数预编译过程(预编译发生在函数执行以前)

  1. 建立AO对象(Activation Object -- 函数执行期上下文)
  2. 找形参和变量的声明,将形参和变量名做为AO属性名,值为undefined
  3. 将实参值和形参统一。
  4. 在函数体里面找函数声明,值赋予函数体。
  5. 注:若是遇到同名的变量会覆盖

当函数执行前会建立AO对象,函数执行完成后会销毁AO对象。

做用域链:每一个AO对象串联起来的链,最后为GO对象

相关文章
相关标签/搜索