MST

星途 面试题库

面试题:JavaScript函数返回值与作用域:理解函数作用域链

请解释JavaScript函数作用域链的概念,并举例说明它如何影响变量的查找和函数返回值。例如,在多层嵌套函数中,内部函数如何访问外部函数的变量?
38.5万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

函数作用域链概念

在JavaScript中,函数作用域链是一个对象列表,用于在执行代码时解析变量和函数名。当函数被创建时,它会创建一个作用域链,作用域链的顶端是函数的局部作用域(包含函数内部声明的变量和参数),然后依次链接到包含该函数的外部函数的作用域,直到全局作用域。这个链决定了在何处查找变量和函数。

对变量查找和函数返回值的影响

  1. 变量查找:当在函数中访问一个变量时,JavaScript会首先在函数的局部作用域中查找。如果找不到,它会沿着作用域链向上查找,直到找到该变量或者到达全局作用域(如果在全局作用域也找不到,则会抛出ReferenceError)。
  2. 函数返回值:作用域链也影响函数返回值。如果返回的是一个函数,该返回函数会携带它被定义时所在的作用域链,即使它在其他地方被调用,也能访问到定义时的作用域中的变量。

多层嵌套函数中内部函数访问外部函数变量示例

function outer() {
    let outerVar = 'I am from outer function';

    function inner() {
        return outerVar;
    }

    return inner;
}

let innerFunc = outer();
console.log(innerFunc()); 
// 输出: I am from outer function

在上述代码中,inner函数嵌套在outer函数内部。inner函数在访问outerVar变量时,由于自身局部作用域没有该变量,它会沿着作用域链向上,在outer函数的作用域中找到outerVar,并返回其值。即使outer函数已经执行完毕,inner函数依然能访问到outerVar,这是因为inner函数保留了它被定义时的作用域链。