修订历史
版本 日期 原因
V1.00 2018/08/1 创建文档
目 录
1.JavaScript 作用域 1
1 1.理解作用域
作用域相关概念:
引擎:
从头到尾负责整个 JavaScript 程序的编译及执行过程。
编译器:
负责语法分析和代码生成。
作用域:
负责收集和维护由所有声明的标识符(变量)组成的一系列查询,并实施一套规则,确定当前执行的代码对这些标识符的访问权限。
举例
var a = 2
编译器:
1. 先编译器会询问作用域 是否已有一个该名称的变量在于同一个作用域的集合中,有的话忽略当前声明,继续编译;没有的话会要求作用域在当前作用域的集合中声明一个新的变量,命名为a。
2. 编译器生成引擎运行时所需代码。
引擎:
询问作用域,是否存在叫做a的变量;
找到变量,将2赋值给它;找不到的话,抛出异常。
引擎的查找操作:
引擎执行编译器生成的代码时,会通过查找变量a来确定它是否已经被声明。
查找分为两种:LHS和RHS。
RHS查询:
与简单的查找某个值别无二致(赋值操作的源头);
LHS查询:
试图找到这个值的容器本身,从而可以对其赋值(赋值操作的目标);
1.2 小测验
1.2.1 例子
function foo(a) {
var b = a;
return a + b;
}
var c = foo( 2 );
个人理解:
1) 对c进行LHS查询,准备赋值。
2) 对foo(2)进行RHS查询,获得foo的值。
3) 隐形a = 2 赋值操作, 对a进行LHS查询,并赋值2。
4) 对b进行LHS查询,准备赋值。
5) 对a进行RHS查询,获得值2,并给b赋值。
6) return a + b, 对a和b进行RHS查询,并给c赋值。
共计3次LHS查询,4次RHS查询