一:作用域
1、作用域是什么
与我平时所认知的作用域有新的理解,之前认知的作用域只是一个存储变量的空间。
其实,作用域是一套存储变量和获取变量的规则
2、作用域嵌套
块级或者函数作用域之间的嵌套。
RHS查询获取变量时,在当前作用域无法获取变量时,就会向其父级作用域继续查找,直到全局作用域
3、编译三步曲
1、词法分析
分解成代码块(词法单元)
例如:let a = 1
分解成 let,a,=,1 这几个词法单元
2、语法分析
词法单元流(数组)转换成“抽象语法树”(AST)的过程
3、代码生成
AST转换成可执行代码的过程
4、LHS(Left-Hand-Side)查询与RHS(Right-Hand-Side)查询
简单理解:
LHS查询就是给变量赋值的操作,RHS查询就是获取变量值的操作
备注:引擎、编译器、作用域之间的关系需要再熟悉
二:词法作用域
1、什么是词法作用域
词法作用域就是定义在词法分析(编译三步曲的第一步)阶段的作用域,由变量和函数声明的位置决定。
2、欺骗词法
改变词法作用域的位置
1、eval()
2、with () {}
这两种方法都会导致性能差,都是不建议使用的。感觉欺骗词法没有存在的意义