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

news/2024/11/6 10:47:33/

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


http://www.ppmy.cn/news/169302.html

相关文章

C#开发的OpenRA游戏之基地工程车移动9

C#开发的OpenRA游戏之基地工程车移动9 前面已经分析了A*算法的启发函数,在这里采用的8方向对角线移动的方案,所以采用了对角线距离计算公式。这样对于评估函数的任务就已经完成了,只要把当前坐标和目标坐标输入此公式就可以计算当前位置的成本开销。 此函数的定义如下: …

dl----yolov4深度解析

yolov4关键参数: [net] batch64 # 所有的图片分成all_num/batch个批次,每batch个样本(64)更新一次参数,尽量保证一个batch里面各个类别都能取到样本 subdivisions64 # 决定每次送入显卡的图片数目 batch/subdivisions width608 # 图片…

大数据时代——生活、工作与思维的重大变革

最近读了维克托迈尔 – 舍恩伯格的《大数据时代》,觉得有不少收获,让我这个大数据的小白第一次理解了大数据。 作者是大数据的元老级先驱。 放一张帅照,膜拜下。 不过这本书我本人不推荐从头读一遍,因为书中的核心理念并不是特…

赶紧收藏!2023年成人高考【复习大纲】

▶高起点考试题型 高起点-语文 试卷满分为150分。考试用时120分钟。 >>>考试内容: 语言知识及运用、现代文阅读、古代诗文阅读和鉴赏、写作四个方面,考试以测试阅读和写作能力为重点。 >>>备考分析: 语文学习要注意平…

入职字节跳动那一天,我哭了(蘑菇街被裁,奋战7个月拿下offer)

前言 先说一下自己的个人情况,20届应届生,通过校招进入到了蘑菇街,然后一待就待了差不多2年多的时间,可惜的是去年8月份受疫情影响遇到了大裁员,而我也是其中一员。好在之前一直想去字节跳动,年尾就已经在…

买个24的显示器

我真正想要的是28的瀚视奇,但液晶电视与显示器合成的效果大打折扣 换成一个24的吧,BENQ 24宽屏幕,效果还可以,颜色太刺眼睛了。 在中关会转了N久也没能找到心仪的电纸书 sony rps 505 不过看了汉王的 电纸书,失望大于期望。 大大打…

显示屏种类(未完)

嵌入式之路,贵在日常点滴 ---阿杰在线送代码 常见的显示设备:LCD OLED 数码管 点阵屏 目录 屏幕分辨率(screen resolution) LCD、LED、IPS、OLED、AMOLED屏幕的区别 常用显示屏 LCD(Liquid Crystal Display,液晶显示器) OLED(Organic Light Emitti…

液晶显示器点距大全

液晶实际上只有一种分辨率,其他的分辨率都是差值计算出来的,无论文字还是图形,效果都打了折扣。 点距的大小直接决定了文档文字的大小,决定了图形的精细程度。专注于办公及文档网页浏览的用户,适宜选择点距较大的液晶…