JavaScript作用域和作用域链学习

154 阅读2分钟

🌟 作用域(Scope)

作用域

  • 解释:作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。
  • 作用:作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。
  • 特点:作用域是分层的,内层作用域可以访问外层作用域的变量,反之则不行。
  • ES6 之前 JavaScript 没有块级作用域,只有全局作用域和函数作用域。ES6的到来,为我们提供了‘块级作用域’,可通过新增命令let和const来体现。

全局作用域

  • 解释:在代码中任何地方都能访问到的对象拥有全局作用域
  • 常见:
  • 1)最外层函数 和在最外层函数外面定义的变量拥有全局作用域
  • 2)所有末定义直接赋值的变量自动声明为拥有全局作用域
  • 3)所有window对象的属性拥有全局作用域

函数作用域

  • 解释:函数作用域,是指声明在函数内部的变量,和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部。

块级作用域

  • 解释:块级作用域可通过新增命令let和const声明,所声明的变量在指定块的作用域外无法被访问。
  • 创建:
  • 1)在一个函数内部
  • 2)在一个代码块(由一对花括号包裹)内部
  • 特点:
  • 1)声明变量不会提升到代码块顶部,let/const 声明并不会被提升到当前代码块的顶部
  • 2)禁止重复声明
  • 3)循环中可绑定块作用域

🌟 作用域链

自由变量

当前作用域没有定义的变量

作用域链