JavaScript 核心基础——(二)作用域

44 阅读2分钟

1. 概念

作用域就是一个变量可以生效的范围。

作用域最大的用处就是隔离变量,不同的作用域下同名的变量不会有冲突(类似命名空间)

2. 全局作用域

  • 在全局作用域中定义的变量可以在任何地方使用
  • 页面打开的时候,浏览器会自动生成一个全局作用域 window,直到页面关闭的时候才会销毁

3. 局部作用域

  • 在 JS 中只有函数能生成一个局部作用域,别的都不行
  • 在局部作用域中定义的变量只能在这个局部作用域内部使用

4. 变量使用规则(重点)

有了作用域以后,变量就有了使用范围,也就有了使用规则

变量使用规则分为三种:定义规则、访问规则和赋值规则

4.1 定义规则

  • 变量定义在哪个作用域下,就是哪个作用域的私有变量
  • 该变量只能在该作用域及其后代作用域中使用

4.2 访问规则(作用域查找机制)

  • 首先,在自己的作用域内查找,如果有就直接拿来使用
  • 如果没有,就去上一级作用域查找,如果有就拿来用,依次类推
  • 如果一直到全局作用域都没有这个变量,那么就会直接报错(该变量 is not defined)

4.3 赋值规则

  • 先在自己作用域内部查找,有就直接赋值
  • 没有就去上一级作用域内部查找,有就直接赋值
  • 如果一直找到全局作用域都没有,那么就把这个变量定义为全局变量,再给它赋值

5. 作用域链

  • 变量取值是到创建这个变量的函数的作用域中取值。但是如果在当前作用域中没有查找到值,就会向上级作用域去找,直到查找到全局作用域,这么一个查找过程形成的链条就叫做作用域
  • 由于变量的查找是沿着作用域链来实现的,所以也称作用域链为变量查找的机制