作用域

定义

首先我们来想想作用域是用来干什么的。在我们的程序中有很多变量(标识符identifier),我们现在或者将来将使用它。那么多变量,我咋知道我有没有声明或者定义过他呢,他的值又是多少呢,我要如何来找到他呢?作用域就是用来帮助我们寻找变量的。

Scope is the set of rules that determines where and how a variable (identifier) can be looked-up

LHS & RHS & ERROR

寻找变量有两种方式:

  • LHS(left-hand-side):当我们想要给一个变量赋值时。

  • RHS(Right-hand-side):当我们想要知道一个变量的值的时候。

为什么我们要知道是采用的哪种方式呢?因为不同的方式可能会带来不同的错误。

当我们使用LHS时,如果scope并没有找到这个变量,在非严格模式下,程序会默认帮我们在全局创建一个变量。在严格模式下,程序并不会帮我们在全局创建,并且会报错ReferenceError.

当我们使用RHS时,如果scope并没有找到这个变量,程序会报错ReferenceError.

如果我们通过RHS成功找到某个变量,但是想对它做不合法的操作,比如对一个null或者undefined上面求属性的话,程序会报错TypeError.

因此,ReferenceError告诉我们作用域查找失败了,TypeError代表作用域查找是成功的。

词法作用域

也就是说,变量的作用域就是他声明的时候的作用域。

待续....


Yawenina
2.3k 声望117 粉丝