LeetCode:2665. 计数器 II,闭包详解

原题链接:
https://leetcode.cn/problems/counter-ii/

在解决本题之前,我们首先需要了解 JavaScript 中的一个重要概念——闭包(Closure)。闭包在 JavaScript 中是一种非常强大的特性,它可以让函数访问并操纵函数之外的变量,即使那个外部函数已经执行结束。

在 JavaScript 中,当一个函数被创建时,它会记住自己被创建时的环境,并且可以访问这个环境中的所有变量。这就意味着,即使一个函数已经执行完毕并且其执行环境已经消失,该函数仍然可以通过闭包来访问和操作它被创建时的环境中的变量。

下面是一个简单的闭包示例:

function outer() {
  var outerVar = 'I am from outer function';
  
  function inner() {
    console.log(outerVar);
  }

  return inner;
}

var innerFunc = outer();
innerFunc();  // 输出:I am from outer function

在这个例子中,outer 函数中定义了一个变量 outerVar 和一个函数 inner。虽然 outer 函数在被调用后就已经执行结束,但由于闭包的存在,我们通过 innerFunc 仍然可以访问 outerVar 这个变量。

现在我们用这个闭包的概念来解决本题:

/**
 * @param {integer} init
 * @return { increment: Function, decrement: Function, reset: Function }
 */
var createCounter = function(init) {
  // 定义一个变量 count 来存储当前的计数值,初始值为 init
  let count = init;

  // 返回一个对象,包含 increment、decrement 和 reset 三个方法
  return {
    // increment 方法将 count 值加 1,然后返回新的 count 值
    increment() {
      return ++count;
    },
    // decrement 方法将 count 值减 1,然后返回新的 count 值
    decrement() {
      return --count;
    },
    // reset 方法将 count 值重置为初始值 init,然后返回新的 count 值
    reset() {
      return (count = init);
    },
  };
};

/**
 * 使用示例:
 * const counter = createCounter(5);
 * console.log(counter.increment()); // 输出:6
 * console.log(counter.reset()); // 输出:5
 * console.log(counter.decrement()); // 输出:4
 */

在这个解法中,我们创建了一个闭包,使得 incrementdecrementreset 这三个函数都能够访问和操作 count 变量。虽然 createCounter 函数在被调用后就已经执行结束,但由于闭包的存在,我们创建的这三个函数仍然可以访问和操作 count 变量。这就是 JavaScript 闭包的强大之处。通过闭包,我们可以创建出具有“记忆”功能的函数,这些函数可以记住并操作它们被创建时所在的环境中的变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值