如何正确描述Javascript闭包

时间:2016-02-06 06:20:45

标签: javascript closures

在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));
        }
    };
})();

0 个答案:

没有答案