什么是关闭?
结束某事的行为或过程,尤其是机构,通道或边境或被关闭的行为。
我知道您一定想知道我的这里是否在JavaScript中关闭或关闭我们的英语通信?您可以提出这个问题,因为上面的定义是Google搜索的定义。那不是我们今天要讨论的。我们将讨论使用JavaScript作为代码样本的教学语言编程中的封闭。
封闭是捆绑在一起(封闭)的函数与周围状态(词汇环境)(MDN)
的组合我将尝试用一个示例来解释这一点。在下面查看此代码。这只是一个符合计数值的普通JavaScript函数。
您认为调用功能的输出是什么?
第一个调用将打印出计数的值1。第二个调用还将打印出值1。这是因为JavaScript与执行上下文创建有关的工作方式。当我们运行上面的JavaScript代码时,JavaScript的第一件事是将函数声明保存在内存中,然后跳过第8行并调用该函数(第一个调用)。调用或调用函数意味着我们应该逐步进入函数按行中定义的代码,并在遇到返回语句时退出。(当找到返回语句时,函数会自动返回undefined
。
在第4行,我们正在定义一个可变的count
,并将其初始值设置为0
。
在第5行上,我们正在通过1
递增可变count
的值。因此,计数的新价值变为第5行上的1
。
在第6行,我们将count
的值记录到控制台。
因此,我们达到了第6行,并且没有其他代码可以通过函数运行,功能返回,值1在控制台上打印出来。这将结束第一个功能调用。
在第9行,我们还有另一个功能调用,我们再次遵循相同的过程。
Count Get Get在第4行的0
初始化,我们在第5行中以1个将其汇总到第6行上的值。值一个仍然打印到控制台上。
如果我们想找到一种方法来防止计数变量始终从0开始,但是,它应该记住它的先前值并继续增加1?那就是闭合的需要。
我们可以使用闭合来轻松实现此功能。
您可能已经注意到,我们具有与以前相似的功能,但是这次具有一个称为CLASURE的内部函数,该功能记住了以前的调用中计数的值。
我们首先将外部函数outerWithClosure
函数调用的值分配给一个称为myFunction
的变量。然后,我们运行第一个myfunction,这将计数的值从0
到1
。由于my函数是封闭的,因此它记住了现在是1
的count值,因此在第二个调用中,计数从value 1
开始,并将其递增到2
等。
作为奖励,我们可以创建一个闭合功能,该功能返回是工厂功能。这将帮助我们创建增量和减少闭合函数,如下所示。