MST

星途 面试题库

面试题:JavaScript高阶函数之闭包应用

请解释什么是JavaScript中的闭包,并举一个利用闭包实现数据私有和封装的高阶函数示例,并说明其工作原理。
14.4万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

闭包的解释

在JavaScript中,闭包是指一个函数能够访问并记住其词法作用域,即使该函数在其原始作用域之外被调用。这意味着内部函数可以“关闭”外部函数的作用域,使得外部函数执行完毕后,其作用域内的变量依然能被内部函数访问和操作。

利用闭包实现数据私有和封装的高阶函数示例

function counter() {
    let count = 0;
    return function() {
        return ++count;
    };
}

let myCounter = counter();
console.log(myCounter()); // 输出 1
console.log(myCounter()); // 输出 2

工作原理说明

  1. 函数定义counter 是一个高阶函数,它内部定义了一个局部变量 count 并初始化为 0,然后返回一个匿名函数。
  2. 闭包形成:返回的匿名函数记住了它在定义时所处的词法环境,也就是 counter 函数的作用域,包含 count 变量。尽管 counter 函数已经执行完毕,其作用域按照常理应该被销毁,但由于返回的匿名函数对该作用域的引用,count 变量依然保存在内存中。
  3. 数据私有和封装count 变量只能通过返回的匿名函数来访问和修改,外部代码无法直接访问 count,从而实现了数据的私有和封装。每次调用返回的匿名函数时,它都会访问并修改 counter 函数作用域内的 count 变量,实现计数功能。