Skip to content

作用域链

什么是作用域链

作用域链是指在代码中查找变量和函数的过程。

当在 JavaScript 中使用一个变量时,JavaScript 引擎会首先尝试在当前作用域下查找该变量,如果没找到,就会沿着作用域链向上查找,直到找到该变量或到达全局作用域。

如果在全局作用域下也没找到该变量,JavaScript 引擎会在非严格模式下隐式地创建一个全局变量,而在严格模式下会抛出ReferenceError异常。

作用域链的示例
javascript
var a = 1;
function foo() {
  var b = 2;
  function bar() {
    var c = 3;
    console.log(a, b, c);
  }
  bar(); // 1 2 3
}
foo();

变量a被定义在全局作用域中,变量b被定义在foo函数作用域中,变量c被定义在bar函数作用域中。

console.log(a, b, c)执行时,JavaScript 引擎首先在bar函数作用域中查找变量c,由于变量b不在bar函数作用域中,JavaScript 引擎会沿着作用域链向上查找,找到变量b,然后继续向上查找,找到变量a,最终输出1 2 3