Javascript: 创建私有对象属性的语法

Javascript: Syntax creating private object properties

由于学习新事物,我遇到了如何将事物设为私有和 public。我的基本想法很清楚。但就其构建方式而言,我遇到了一个具体问题:

var NOW = (function(){
    var privateVariable = 5;
    var privateFunction = function(){};
    return{
        publicVariable: 4,
        publicFunction: function(){}
    };
})();

所以我的问题是为什么函数包含在方括号(圆括号)内?

var NOW =(function(){...})();

它们在该代码中是可选的,这也可以正常工作:

var NOW = function(){
    var privateVariable = 5;
    var privateFunction = function(){};
    return{
        publicVariable: 4,
        publicFunction: function(){}
    };
}();

人们习惯于包装他们将在 () 中立即调用的函数,因为如果您 没有 将结果分配给某些东西(或类似),有必要告诉解析器 function 关键字正在启动函数 expression 而不是函数 declaration。例如,这不行:

function() { alert("foo"); }();

因为当解析器遇到 function 它可能需要语句、声明或表达式的地方时,它假定它开始了一个声明。所以我们这样做:

(function() { alert("foo"); })();

或者这个:

(function() { alert("foo"); }());

或任何其他事情(参见 this question's answers)将解析器置于期望表达式而不是语句或声明的模式。