Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LeetCode题解:2665. 计数器 II #486

Open
chencl1986 opened this issue Nov 7, 2024 · 0 comments
Open

LeetCode题解:2665. 计数器 II #486

chencl1986 opened this issue Nov 7, 2024 · 0 comments

Comments

@chencl1986
Copy link
Owner

原题链接:
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 闭包的强大之处。通过闭包,我们可以创建出具有“记忆”功能的函数,这些函数可以记住并操作它们被创建时所在的环境中的变量。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant