在Javascript中查看“Singleton”的实现(我一直在玩的东西,如果我错了请纠正我),究竟是什么关闭?
据我所知,在阅读“你不懂JS”关于范围和闭包的书中,正确的术语是:函数(或模块)M1对主范围有封闭。
为了描述这一点,我想说M1在主对象中创建了一个私有范围。这两个范围之间的概念边界被认为是“封闭”。
但在我看来,为了成为一个闭包(而不仅仅是一个具有私有作用域的函数),你需要一个可以在你关闭的范围内访问的界面,让你可以访问私有范围。
即。在我看来,你可以说通过在私有范围内使变量可用于相应的“公共”范围来定义闭包,即使在执行创建闭包的函数之后控制权已被传回“公共”范围之后也是如此。
以上是否正确?
/**
* Singleton object implementation
*/
var M1 = (function() {
// Private variables
var items = [];
var x = 5;
// Getters and setters
var getX = function() {return x;};
var getItems = function() {return items;};
// Private functions
var item = function(name) {
this.name = name;
};
// Public interface
return {
getX: getX,
getItems: getItems,
createItem: function(name) {
items.push(new item(name));
}
};
})();