Skip to content

作用域和作用域链

434字约1分钟

2022-04-15

提问

  1. 什么是javascript的作用域?
  2. 什么是 javascript的作用域链?

作用域

作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。

作用域决定了代码区块中变量和其他资源的可见性。

全局作用域

在代码中任意地方都能访问到的对象拥有全局作用域。

函数作用域

声明在函数内部的变量,仅能在当前函数内部访问到的,拥有函数作用域

块级作用域

通过 letconst ,在 函数内部,或者在一队花括号 里声明的变量,拥有块级作用域

块级作用域 特性:

  • 声明的变量不会提升到当前作用域顶部
  • 禁止重复声明

作用域链

作用域链的作用是保证对执行环境有权访问的所有变量和函数的有序访问,通过作用域链,我们可以访问到外层环境的变量和函数。

作用域链本质上是一个指向变量对象的指针列表。变量对象是一个包含了执行环境中所有变量和函数的对象。 作用域链的前端使用都是当前执行上下文的变量对象。全局执行上下文的变量对象始终是作用域链的最后一个对象。

当我们查找一个变量时,如果当前执行环境中没有找到,会沿着作用域链向后查找。

作用域链的创建过程跟执行上下文的建立有关。