MST

星途 面试题库

面试题:JavaScript 闭包与变量作用域的综合应用

编写一段 JavaScript 代码,利用闭包特性实现一个计数器函数。该函数每次调用返回一个比上次调用返回值大 1 的数字,并且要清晰展示变量作用域在其中的体现,同时解释闭包如何保存变量状态。
24.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
function counter() {
    let count = 0;
    return function() {
        // 这里访问到了counter函数作用域中的count变量
        return ++count;
    };
}

// 创建一个计数器实例
const myCounter = counter();
console.log(myCounter()); // 输出1
console.log(myCounter()); // 输出2
console.log(myCounter()); // 输出3

变量作用域体现

  1. counter函数内部声明了变量count,其作用域仅限于counter函数内部。
  2. 内部返回的匿名函数形成了闭包,该匿名函数可以访问到counter函数作用域中的count变量,尽管counter函数已经执行完毕,其作用域链依然被保存。

闭包保存变量状态解释

  1. counter函数执行并返回内部匿名函数时,JavaScript引擎不会销毁counter函数的作用域。
  2. 因为返回的匿名函数持有对counter函数作用域的引用(形成闭包),所以count变量的状态得以保存。每次调用返回的匿名函数,都是在同一个保存的count变量基础上进行操作,从而实现了计数器功能。