1、JavaScript编译过程
首先, JavaScript 引擎不会有大量的(像其他语言编译器那么多的) 时间用来进行优化, 因为与其他语言不同, JavaScript 的编译过程不是发生在构建之前的。
对于 JavaScript 来说, 大部分情况下编译发生在代码执行前的几微秒(甚至更短! ) 的时间内。 在我们所要讨论的作用域背后, JavaScript 引擎用尽了各种办法(比如 JIT, 可以延迟编译甚至实施重编译) 来保证性能最佳。
简单地说, 任何 JavaScript 代码片段在执行前都要进行编译(通常就在执行前)。 因此,JavaScript 编译器首先会对 var a = 2; 这段程序进行编译, 然后做好执行它的准备, 并且通常马上就会执行它。
2、理解作用域
• 引擎
从头到尾负责整个 JavaScript 程序的编译及执行过程。
• 编译器
负责语法分析及代码生成等脏活累活。
• 作用域
负责收集并维护由所有声明的标识符(变量) 组成的一系列查询, 并实施一套非常严格的规则, 确定当前执行的代码对这些标识符的访问