JavaScript 中什么是作用域链?它有什么作用?

作用域链是 JavaScript 中用来解决变量查找的机制。它是由多层嵌套的作用域组成的,里层作用域可以访问外层作用域中的变量。
当在某个作用域中找不到某个变量的定义时,会向上级作用域查找,这种向上查找的链条就叫做作用域链。

作用域链的作用有:

  1. 变量安全:作用域链可以避免变量污染,不同作用域中的同名变量不会互相影响。
function foo() {
  var x = 1;
  function bar() {
    var x = 2;
  }
}

这里 foo 函数内的 x 和 bar 函数内的 x 是互不影响的,因为它们处在不同的作用域链上。

  1. 变量隐藏:子作用域可以访问父作用域中的变量,但不可以修改。这实现了变量的隐藏。
function foo() {
  var x = 1; 
  function bar() {
    console.log(x); // 可以访问
  } 
  bar();
}

bar(); // Uncaught ReferenceError: bar is not defined
bar 函数可以访问 foo 函数内的 x,但外部无法访问 bar,实现了变量的隐藏。
  1. 提高可维护性:作用域链有助于将变量和函数在逻辑上组织成层次,提高程序的可读性和可维护性。

所以作用域链是 JavaScript 实现词法作用域的机制,它可以实现变量安全和隐藏,从而写出更加清晰和健壮的程序。理解作用域链的工作原理,是成为 JavaScript 高手的重要一步。