我一直想知道 - JavaScript闭包可用于什么?
我知道怎么写它们,我知道它们是如何工作的,但我无法理解如何使用它们。
function closure() {
var name = "John";
function displayName() {
return 'Hello, ' + name;
}
return displayName;
}
到目前为止,我只发现了一种用途 - 封装数据,因此在函数外部不可见。
但他们还能用什么呢?我应该用闭包写OOP吗?我是否需要将所有代码放在一个闭包中,以免它影响全局范围?
任何澄清都非常感谢!
答案 0 :(得分:1)
还可以用来保护colsure中的代码,防止闭包之外的不同库之间的命名冲突。每当我创建一个JQuery插件时,我创建它作为一个自调用闭包我传递给“JQuery”,但由于我的函数定义中的命名$变量的本地范围,可以安全地引用闭包里面的$。即使有其他库使用$变量用于不同的目的
(function($){ //use $ safely inside the closure })
(jQuery);
答案 1 :(得分:1)
就个人而言,除了封装或创建私有上下文这些明显的东西之外,我喜欢Singleton JavaScript Design Pattern:
function Singleton() {
// cached instance
var instance = this;
//proceed as normal - adding some variables
this.variable1 = 1000;
this.variable2 = 3000000;
Singleton = function() {
return instance;
}
}
var singleton1 = new Singleton();
var singleton2 = new Singleton();
if(singleton1 === singleton2) {
console.log("Singleton works :)");
}
else {
console.log("Singleton doesn't work :/");
}
您可以将此代码直接粘贴到Chrome JavaScript控制台中。
当然,您可以调整它以满足您的需求。还有一些缺点 - 您可以覆盖Singleton函数,并且您将无法再访问实例。但这是另一个问题。
我很久以前在Stoyan Stefanov(O'Reilly)的JavaScript Patterns中找到了它 。检查一下,因为还有其他有用的设计模式和闭包应用示例。根据这本书:
You can use closure to store some private data, which is accessible by the returned function but not to the outside code.