1.
引擎
从头到尾负责整个javascript程序的编译及执行的过程。它可以根据需要创建并储存变量。
编译
负责语法分析及代码生成等。
作用域
负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限。
先看看他们三兄弟的大概关系:对于声明一个变量并赋值的过程。
1) 首先,var a在其作用域中声明新变量。这会在最开始的阶段,也就是代码执行前进行。
2) 接下来,a=2会查询(LHS查询)变量a并对其进行赋值。
2.遍历嵌套作用域链的规则很简单:引擎从当前的执行作用域开始查找变量,如果找不到,就向上一级继续查找。
当抵达最外层的全局作用域的时候,无论找到还是没有找到,查找过程都会停止。