作用域
定义
首先我们来想想作用域是用来干什么的。在我们的程序中有很多变量(标识符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
代表作用域查找是成功的。
词法作用域
也就是说,变量的作用域就是他声明的时候的作用域。
待续....
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。