单身声明的差异

时间:2014-07-29 07:32:08

标签: javascript singleton declaration

我很难理解以下单例声明的区别是什么:

var Database = {
    hostname : "db1",
    opendatabase : function() {
        //some code here
    }
}

var Database = (function () {
    var hostname = "db1";

    return {
        opendatabase : function () {
            //some code here
        }
    }
}());

2 个答案:

答案 0 :(得分:3)

正如评论中所指出的,第二个代码示例无效。这是因为最外面的花括号。这样做的正确方法是:

var Database = (function() {
    var hostname = "db1";

    return {
        opendatabase : function() {
            //some code here
        }
    };
})();

话虽如此,两个代码示例之间存在一个主要区别。在第一个hostname是对象上的属性,意味着以下是有效代码:

console.log(Database.hostname); //outputs "db1"

在第二个示例中,hostname是一个私有变量,这意味着它无法在Database构造函数外部访问:

console.log(Database.hostname); //outputs undefined

答案 1 :(得分:1)

首先,进行小的语法修正。 第二个片段应该是

var Database = (function () {
    var hostname = "db1";

    return {
        opendatabase : function () {
            //some code here
        }
    }
}());

这两个单身人士之间的区别在于,在第一个单身人士中,每个人都可以使用hostname更改Database.hostname = 'I changed your stuff';,但在第二个中,只有Database的功能可以访问hostname因为它是在匿名函数中声明的。