为什么我的职能公开?

时间:2012-11-02 02:39:10

标签: javascript scope singleton closures

我几天前问了一个类似的问题,但我想我还在做错事,所以这个问题更有针对性:

根据我的理解并根据this bookprivateFunction对象外部不能提供函数mySingleton,其中publicFunction只能被调用这样:mySingleton.publicFunction

但是 - 根据我的意愿和意图,privateFunction在对象之外非常可用。

为什么?我做错了什么?

    var mySingleton = new (function (window, document, undefined) {

            var privateFunction = function () {
                //code
            },

            mySingleton = {
                publicFunction: function () {
                    //code
                }
            };

        return mySingleton;
    })(window, document, undefined);
编辑:我刚发现问题。语法错误,多么羞辱。看看第2行的分号。我昨晚发帖时错过了这一行:

    var mySingleton = new (function (window, document, undefined) {
        var self = this;

        privateFunction = function () {
            //code
        },

        mySingleton = {
            publicFunction: function () {
                //code
            }
        }

        return mySingleton ;
    })(window, document, undefined);

用逗号替换分号会使私有方法“再次”私有。无论如何,看看这段代码,我希望这样的语法会导致语法错误,因为privateFunction之后的逗号是正确的 - 我是不是错了?

1 个答案:

答案 0 :(得分:0)

你见过这种代码吗?

var toto = 'titi',
    titi = 'tata',
    tata = 'toto';

这是多个作业。这样我们就不会每次都重复使用var关键字。但是,由于您未使用var关键字,privateMethod实际上已泄露到全局范围。那很糟糕。

我认为你正在寻找这种模式:

var mySingleton = function() {
    function privateMethod() {}

    return {
        publicMethod: function() {}
    };
}();

不需要windowdocumentundefined垃圾。