由于学习了新的东西,我遇到了如何私密和公开的事情。我的基本想法很清楚。但就其构建方式而言,我得到了一个具体问题:
var NOW = (function(){
var privateVariable = 5;
var privateFunction = function(){};
return{
publicVariable: 4,
publicFunction: function(){}
};
})();
所以我的问题是为什么函数包含在括号内(括号)?
var NOW =
的 (
function(){...}
的 )
();
答案 0 :(得分:5)
它们在该代码中是可选的,这也可以正常工作:
var NOW = function(){
var privateVariable = 5;
var privateFunction = function(){};
return{
publicVariable: 4,
publicFunction: function(){}
};
}();
人们习惯于包装他们将在()
中立即调用的函数,因为如果你不将结果分配给某些东西(或类似的东西),那么这是必要的告诉解析器function
关键字正在启动函数表达式而不是函数声明。例如,这不合适:
function() { alert("foo"); }();
因为当解析器遇到function
时,它可能期望语句,声明或表达式,因此它假定它启动声明。所以我们这样做:
(function() { alert("foo"); })();
或者这个:
(function() { alert("foo"); }());
或其他任何事情(参见this question's answers)将解析器置于期望表达式的模式,而不是语句或声明。