第一章 作用域是什么
用来存储变量的一套规则,使变量被方便的找到
- 编译的大致过程
- 分词/词法分析
分词:将字符串分析为词法单元
var a=2; => (var,a,=,2,;)
词法分析:判断词法单元是独立的还是居于其他词法单元的一部分
- 解析/语法分析
将词法单元转化为一个由元素逐级嵌套所组成的语法结构树—抽象语法树(Abstract Syntax Tree)
- 代码生成
将AST转化为可执行代码
- 编译器在作用域中的两种查找方式
LHS:变量出现在赋值操作的左侧进行的查询,找到操作目标;
RHS:变量出现在赋值操作的非左侧进行的查询,去溯源;
L和R的理解:赋值操作的左侧或右侧。
function foo(a){
var b=a;
return a+b;
}
var c=foo(2);
有三处LHS:var c=foo(2)
,var a=2
,var b=a
;
有四处RHS:foo(2)
,a(var b=a)
,a(a+b)
,b(a+b)
。
- 作用域的嵌套—作用域链
当一个块或者函数嵌套在另一个块或者函数中时,就发生了作用域的嵌套。在当前作用域中无法找到某个变量的时候,就会去外层嵌套的作用域中继续查找,直到找到该变量或抵达最外层的作用域(全局作用域)为止。
网友评论