全国统一学习专线

如何正确理解闭包

logo
来源:七品教育

2024-04-25|已帮助:24

进入 >

想必作为前端开发人员,大家对“闭包”这个词都很熟悉,但真正理解闭包的概念并熟练使用它是判断前端技术水平的硬性标准。很多刚入行的前端,因为对闭包的概念理解不是很透彻,

结果,每个人在面试阶段都屡屡碰壁,惨遭pass。那么今天我就带大家深入了解一下封闭的概念。

先看一下下面的代码。

var Closure=function(){ var count=0;var get=function(){ count;返回计数;};返回get };var counter=Closure();控制台。log(counter());//输出1个控制台。log(counter());//输出2console.log(计数器());//输出3这段代码中,

我们来看看上面例子的特点。按照通常命令式编程思维的理解,count是闭包函数内部的变量,其生命周期是闭包被调用的时期。当闭包从调用堆栈返回时,

count变量请求的空间也被释放。问题是在调用Closure()后,counter()引用了“已发布”的count变量,并且没有错误。

相反,每次调用counter()时都会修改并返回count。这是怎么回事?

这就是所谓封闭的特征。当函数返回内部定义的函数时,会生成一个闭包,其中不仅包括返回的函数,还包括该函数的定义环境。在上面例子中,

当函数Closure()的内部函数get被外部变量counter引用时,counter和Closure()的局部变量是一个闭包。如果还不够清楚,下面的例子可以帮助你理解:

var Closure=function(){ var count=0;var get=function(){ count;返回计数;};返回get };var counter 1=Closure();var counter 2=Closure();控制台。log(计数器1());//输出1个控制台。log(计数器2());//输出1个控制台。log(计数器1());//输出2控制台。log(计数器1());//输出3控制台。log(计数器2());//输出2上面这个例子解释了闭包是如何产生的:计数器一和计数器2分别调用了闭包()函数,

闭包有什么用?事实上,闭包有两个主要目的,一是实现嵌套回调函数,二是隐藏对象的细节。

我们知道,Javascript对象没有私有属性,这意味着对象的每个属性都对外公开。这可能存在安全风险,例如,对象的用户直接修改了某个属性,这导致了对象内部数据一致性的破坏。

按照惯例,Javascript对所有私有属性加下划线,表明该属性是私有的,外部对象不应直接读取或写入它。但这只是一份非正式协议。如果对象的用户不这样做,是否有更严格的机制?答案是肯定的,

它可以通过关闭来实现。让我们再看看前面的例子:

var Closure=function(){ var count=0;var get=function(){ count;返回计数;};返回get };var counter=Closure();控制台。log(counter());//输出1个控制台。log(counter());//输出2console.log(计数器());//输出3我们可以看到,

通过上面的演示,我希望能帮助您理解闭包。

过去推荐:

JS数据类型的字符串文本

JS的5个坏习惯,现在就改掉。

我写CSS的常用程序

以上是七品教育整理的如何正确理解闭包全部内容。