我已经仔细阅读了SO上的所有其他(出色)答案(尤其是:How do JavaScript closures work?),但是我希望您对我对这一概念的理解有所反馈。
我知道一个用例是对公共(public)访问隐藏私有(private)方法的实现。
我想到的另一个是将其作为工厂生成器:
<script>
function carFactory( make ) {
var m = make;
return { manufacture: function ( model )
{console.log("A " + m + " " + model + " has been created");}
}
}
toyotaFactory = carFactory("toyota");
hondaFactory = carFactory("honda");
toyotaFactory.manufacture("corolla");
toyotaFactory.manufacture("corolla");
hondaFactory.manufacture("civic");
</script>
输出:
A toyota corolla has been create
A toyota corolla has been created
A honda civic has been created
那么您是否认为它是闭包的有效用例(即使用相同的代码库创建多个工厂)?还是我可以使用更好的东西来实现相同的目的?
请注意,问题不是关于闭包的技术实现,而是有关应用程序设计/开发中的有效用例的问题。
谢谢。
最佳答案
是的,将变量设为私有(private)是闭包的有效用法。它使您可以私有(private)访问变量,而无需使其成为公共(public)成员。
有关其他示例,请参见此引用:http://www.crockford.com/javascript/private.html