「注解」《你不知道的JavaScript(上卷)》第一章:作用域是什么

162 阅读1分钟

书名:《你不知道的JavaScript(上卷)》
作者:Kyle Simpson
译者:赵望野 , 梁杰


1.1 编译原理

在传统的编译语言的流程中,程序中的一段源代码在执行之前会经历以下三个步骤:

  1. 词法分析
  2. 语法分析
  3. 代码生成

1.2 理解作用域

理解引擎、编译器、作用域

编译器如何处理 var a = 2;


总结:引擎在执行赋值操作之前会询问作用域中是否含有a这个变量,有则赋值,无则抛出异常,对编译器来说,遇到var a则会先询问作用域中是否有a,是则继续,无则让作用域在当前作用域的集合中声明一个新的变量,并命名为a。

准确理解LHS查询和RHS查询

LHS指的是赋值操作的目标是谁
RHS指的是赋值操作的源头


1.3 作用域嵌套

作用域有向上查找的规则


1.4 异常

区分LHS查询和RHS查询是一件很重要的事情

  • RHS查询如果从下到上一直找到全局作用域都找不到的情况下,会抛出异常。
  • LHS查询如果从下到上一直找到全局作用域都找不到的情况下,全局作用域就会创建一个具有该名称的变量。(非严格模式下)

1.5 小结

作用域的概念

作用域是一套规则,用于确定在何处以及如何查找变量。