You don't know JS 你不知道的Javascript

# 作用域

javascript是一种编译型的语言,但它不是提前编译的,Javascript大部分情况下的编译发生在代码执行前的几微秒内。在作用域背后,Javascript引擎用尽了方法(比如JIT,延迟编译甚至实施重编译)来保证性能最佳。

两个重要角色

  • 引擎 从头到尾负责整个javascript程序的编译和执行过程。
  • 编译器 负责词法分析、语法分析、代码生成等脏活累活。

传统的编译过程分为三个阶段:词法分析、语法分析、代码生成。

var a = 2; 
1

引擎认为这里有两个完全不同的声明,一个由编译器在编译时处理,另一个则由引擎在运行时处理。