MST

星途 面试题库

面试题:JavaScript 中函数作用域如何影响闭包的形成

请阐述 JavaScript 函数作用域的特点,并举例说明函数作用域是怎样为闭包的形成提供环境的。
42.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

JavaScript 函数作用域的特点

  1. 局部性:函数作用域内声明的变量和函数,仅在该函数内部可访问。例如:
function example() {
    let localVar = 10;
    console.log(localVar); // 10
}
console.log(localVar); // 报错,localVar 在此处未定义
  1. 函数内部屏蔽外部:如果函数内部声明了与外部作用域同名的变量,函数内部会使用自己作用域内的变量。例如:
let globalVar = 5;
function inner() {
    let globalVar = 10;
    console.log(globalVar); // 10
}
inner();
console.log(globalVar); // 5
  1. 函数声明提升:函数声明在其作用域内会被提升到顶部,意味着可以在声明之前调用函数。例如:
func();
function func() {
    console.log('函数声明提升');
}

函数作用域为闭包形成提供环境的示例

闭包是指函数可以记住并访问其词法作用域,即使函数在当前词法作用域之外执行。函数作用域为闭包提供了保存变量的环境。例如:

function outer() {
    let outerVar = 10;
    function inner() {
        console.log(outerVar);
    }
    return inner;
}
let closure = outer();
closure(); // 10

在上述例子中,outer 函数返回了 inner 函数。inner 函数形成了闭包,它记住了 outer 函数作用域中的 outerVar 变量。即使 outer 函数执行完毕,outerVar 变量依然被 inner 函数引用而不会被垃圾回收机制回收,closure 调用 inner 函数时能够访问到 outerVar 变量,这体现了函数作用域为闭包提供了保存变量的环境。