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

Javascript:创建私有对象属性的语法,javascript,object,properties,private,Javascript,Object,Properties,Private,由于学习了新事物,我遇到了如何将事物私有化和公开化的问题。我的基本想法很清楚。但就如何建造而言,我有一个具体的问题: var NOW = (function(){ var privateVariable = 5; var privateFunction = function(){}; return{ publicVariable: 4, publicFunction: function(){} }; })(); 所以我的问题是为什

由于学习了新事物,我遇到了如何将事物私有化和公开化的问题。我的基本想法很清楚。但就如何建造而言,我有一个具体的问题:

var NOW = (function(){
    var privateVariable = 5;
    var privateFunction = function(){};
    return{
        publicVariable: 4,
        publicFunction: function(){}
    };
})();
所以我的问题是为什么函数被包装在括号里


var NOW=函数{…}

在该代码中它们是可选的,这也很好:

var NOW = function(){
    var privateVariable = 5;
    var privateFunction = function(){};
    return{
        publicVariable: 4,
        publicFunction: function(){}
    };
}();
人们习惯于包装将立即调用的函数,因为如果不将结果分配给某个或类似的对象,则有必要告诉解析器function关键字正在启动函数表达式,而不是函数声明。例如,这不好:

function() { alert("foo"); }();
因为当解析器遇到可能需要语句、声明或表达式的函数时,它假定它启动了一个声明。所以我们这样做:

(function() { alert("foo"); })();
或者这个:

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

或者其他任何一种方法,将解析器置于需要表达式而不是语句或声明的模式。

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

var NOW = function(){
    var privateVariable = 5;
    var privateFunction = function(){};
    return{
        publicVariable: 4,
        publicFunction: function(){}
    };
}();
人们习惯于包装将立即调用的函数,因为如果不将结果分配给某个或类似的对象,则有必要告诉解析器function关键字正在启动函数表达式,而不是函数声明。例如,这不好:

function() { alert("foo"); }();
因为当解析器遇到可能需要语句、声明或表达式的函数时,它假定它启动了一个声明。所以我们这样做:

(function() { alert("foo"); })();
或者这个:

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

或者其他任何一种方法,将解析器置于需要表达式的模式,而不是语句或声明。

这就是生命,第二部分是什么?是react jsx吗?@RobertMoskal:我想这只是一个强调问题的尝试。它没有第二部分,我只是提出了这个代码来说明我的问题。这个问题已经得到了很好的回答,对于每个人来说,生命的第二部分是什么?是react jsx吗?@RobertMoskal:我想这只是一个强调问题的尝试。它没有第二部分,我只是提出了这个代码来说明我的问题。这个问题已经得到了很好的回答,thx对每个人都做了很好的解释,并且非常清楚地说明了使用该公约的内容和原因,尽管在这种情况下没有必要这样做。CheersVery解释得很好,并且非常清楚地说明了使用此约定的内容和原因,尽管在这种情况下没有必要使用此约定。干杯