前端面试题 - 56. 作用域链

72 阅读1分钟

作用域链是JavaScript中一种非常重要的概念,它决定了变量和函数的可访问性

作用域链是由多个作用域对象构成的链式结构,每个作用域对象都包含了当前作用域中定义的变量和函数,以及指向父级作用域对象的指针。

  • 当JavaScript解释器在当前作用域中查找变量或函数时,会首先查找当前作用域中是否有该变量或函数
  • 如果没有,则会沿着作用域链向上查找,直到找到该变量或函数或者到达全局作用域为止。
  • 如果找到了该变量或函数,则可以直接访问;
  • 如果没有找到,则会抛出ReferenceError异常。

为了更好地理解作用域链,我们来看一个简单的例子:

function outer() {
  var x = 1;
  function inner() {
    var y = 2;
    console.log(x + y);
  }
  inner();
}
outer(); // 输出3

在上面的代码中,我们定义了一个outer()函数和一个inner()函数。在inner()函数中,我们访问了x和y两个变量,但是x变量并没有在inner()函数中定义,因此JavaScript解释器会沿着作用域链向上查找,最终找到了x变量。由于x变量是在outer()函数中定义的,因此它的作用域是outer()函数的作用域,而outer()函数是inner()函数的父级作用域,因此x变量可以被inner()函数访问。 总之,作用域链是JavaScript中非常重要的概念,它决定了变量和函数的可访问性,理解作用域链对于编写高质量的JavaScript代码非常重要。