传统编译语言:(程序代码执行之前)编译
- 分词/词法分析
- 解析/语法分析
- 代码生成(将AST转换为可执行代码)
任何JavaScript代码片段在执行前都要进行编译(通常就在执行前)
引擎:
从头负责整个JavaScript程序的编译及执行过程
编译器:
负责语法分析及代码生成等
作用域:
负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限(作用域就是一套规则,用于确定在何处以及如何查找变量(标识符))
当变量出现在赋值操作的左侧时进行LHS查询,出现在右侧时进行RHS查询
ReferenceError同作用域判别失败相关,而TypeError则代表作用域判别成功了,但对结果的操作是非法或不合理的
如果查找的目的是对变量进行赋值,那么就会使用LHS查询,如果目的是获取变量的值,就会使用RHS查询。
不成功的RHS引用会导致抛出ReferenceError异常。不成功的LHS引用会导致自动隐式地创建一个全局变量(非严格模式下),该变量使用LHS引用的目标作为标识符,或者抛出ReferenceError异常(严格模式下)
版权声明:本文为qq_37196494原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。