MST

星途 面试题库

面试题:JavaScript中闭包与作用域的关系

请解释JavaScript中闭包是如何依赖作用域链的,并举例说明闭包如何访问外部函数的变量。
20.0万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 闭包对作用域链的依赖
    • 在JavaScript中,函数在创建时会生成一个作用域链。作用域链由函数的词法环境和其上层的词法环境(父级作用域等)组成。闭包是指有权访问另一个函数作用域中变量的函数。当内部函数在外部函数返回后依然存在时,闭包就形成了。闭包依赖作用域链是因为它需要通过作用域链来访问外部函数的变量。即使外部函数执行完毕,其作用域也不会被销毁,因为闭包对其存在引用,闭包通过作用域链可以找到外部函数作用域中的变量。
  2. 举例说明闭包访问外部函数变量
function outer() {
    let outerVariable = 10;
    function inner() {
        return outerVariable;
    }
    return inner;
}
let closureFunction = outer();
console.log(closureFunction());

在上述代码中,outer函数定义了一个变量outerVariable,并返回一个内部函数inner。当outer函数执行完毕返回inner函数后,inner函数形成了闭包。inner函数通过作用域链访问到了outer函数作用域中的outerVariable变量,所以closureFunction()调用时能正确返回10