虽然闭包是 JavaScript 中的基本概念,但新手可能会发现它们模糊且难以掌握。具体来说,如果没有任何实际经验,ECMA 标准的定义可能很难理解。因此,我们不会在这篇文章中花很多篇幅来解释闭包的概念,而是通过使用实际代码让您轻松理解。
function A(name){ function B(){ console.log(name); } return B; } var C = A("Closure"); C();//Closure
这是最简单的闭包。
现在我们已经了解了基础知识,让我们简要地研究一下它与典型函数的不同之处。以下是上述代码翻译成自然语言后的样子:
一条语句可以封装这五个操作:
函数A内部的函数B和变量名被函数A外部的变量C引用。
经过一点修改,该语句定义了一个闭包,如下所示:
当内部函数被外部函数外部的变量引用时,就形成了闭包。
因此,执行以上五个操作就定义了一个闭包。
在了解闭包的用途之前,我们先来了解一下 JavaScript 的 GC(垃圾收集)机制。
在 JavaScript 中,当一个对象不再被引用时,它会被 GC 回收,否则,它会继续保留在内存中。
在上面的例子中,B 依赖于 A,因为 B 是在 A 内部定义的,而 A 被 C 间接引用,因为外部变量 C 引用了 B。
即A不会被GC回收,会继续保存在内存中。为了证明这个推理,我们稍微改进一下上面的例子。
function A(){ var count = 0; function B(){ count ++; console.log(count); } return B; } var C = A(); C();// 1 C();// 2 C();// 3
为什么计数没有重置?
关闭机制:
因此,如果你在模块中定义了一些变量,并且希望将这些变量保留在内存中,但又不想“污染”全局变量,则可以使用闭包来定义该模块。
以上是[JavaScript] 在几秒钟内理解闭包的详细内容。更多信息请关注PHP中文网其他相关文章!