JavaScript之作用域

120 阅读1分钟

一:作用域

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 () {}

这两种方法都会导致性能差,都是不建议使用的。感觉欺骗词法没有存在的意义