我很难理解以下单例声明的区别是什么:
var Database = {
hostname : "db1",
opendatabase : function() {
//some code here
}
}
和
var Database = (function () {
var hostname = "db1";
return {
opendatabase : function () {
//some code here
}
}
}());
答案 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
因为它是在匿名函数中声明的。