Javascript 单例声明中的差异

Javascript 单例声明中的差异,javascript,singleton,declaration,Javascript,Singleton,Declaration,我很难理解以下单例声明的区别: var Database = { hostname : "db1", opendatabase : function() { //some code here } } 及 正如注释中指出的,第二个代码示例无效。这是因为最外层的花括号。正确的做法是: var Database = (function() { var hostname = "db1"; return { opendatabas

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

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


正如注释中指出的,第二个代码示例无效。这是因为最外层的花括号。正确的做法是:

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

    return {
        opendatabase : function() {
            //some code here
        }
    };
})();
也就是说,这两个代码示例之间有一个主要区别。在第一个示例中,
hostname
是对象的属性,这意味着以下代码是有效的:

console.log(Database.hostname); //outputs "db1"
在第二个示例中,
hostname
是一个私有变量,这意味着不能在数据库构造函数之外访问它:

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

正如注释中指出的,第二个代码示例无效。这是因为最外层的花括号。正确的做法是:

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

    return {
        opendatabase : function() {
            //some code here
        }
    };
})();
也就是说,这两个代码示例之间有一个主要区别。在第一个示例中,
hostname
是对象的属性,这意味着以下代码是有效的:

console.log(Database.hostname); //outputs "db1"
在第二个示例中,
hostname
是一个私有变量,这意味着不能在数据库构造函数之外访问它:

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

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

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

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

这两个单例的区别在于,在第一个单例中,每个人都可以使用
Database.hostname='I change your stuff'(我改变了你的东西)更改
hostname
,但在第二个函数中,只有
数据库
的函数可以访问
主机名
,因为它是在匿名函数中声明的。

首先,一个小的语法更正。 第二个片段应该是

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

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

这两个单例的区别在于,在第一个单例中,每个人都可以使用
Database.hostname='I change your stuff'(我改变了你的东西)更改
hostname
,但在第二个代码中,只有
数据库
的函数才能访问
主机名
,因为它是在匿名函数中声明的。

第二个函数是无效的JavaScript,因为它包含语法错误。你能详细说明一下吗?好的,我修复了错误。第二个函数是无效的JavaScript,因为它包含语法错误。你能详细说明一下吗关于那件事?好吧,我搞错了。太好了。在第二个单例中,返回的函数总是相同的,还是每次都是不同的实例?在第二个单例中,包含
hostname
的函数只调用一次,而
opendatabase
函数也创建一次。没有多个实例。只有一个具有私有变量great的实例。在第二个单例中,返回的函数总是相同的,还是每次都是不同的实例?在第二个单例中,包含
hostname
的函数只调用一次,而
opendatabase
函数也创建一次。没有多个实例。只有一个带有私有变量的实例