用来存储变量,并之后可以快速方便的找到这些变量的规则 作用域是一套规则,用于确定在何处以及如何查找变量(标识符)。如果查找的目的是对 变量进行赋值,那么就会使用 LHS 查询;如果目的是获取变量的值,就会使用 RHS 查询。赋值操作符会导致 LHS 查询。=操作符或调用函数时传入参数的操作都会导致关联作用域 的赋值操作。
-
举例
var a = 1
这段代码
- 编译器会吧这段代码进行词法分析转换成
var , a , = , 1
代码块,这些代码块叫做词法单元 - 编译器将这些词法单元进行解析(语法分析)形成一个由元素逐级嵌套所组成的程序语法结构的树。简称抽象语法树(AST) 图1 图2、AST
- 将AST转换成机器可执行的指令
- ReferenceError 同作用域判别失败相关,而 TypeError 则代表作用域判别成功了,但是对 结果的操作是非法或不合理的。
- 无论函数在哪里被调用,也无论它如何被调用,它的词法作用域都只由函数被声明时所处 的位置决定。
- js有两种方法
eval 和 with
function foo(str,a){
eval(str)//欺骗!
console.log(a+b)
}
var b = 2
foo(`var b = 3`,1)