var myObject = (function(){
var value = 0;
return {
getValue: function(){
return value;
}
}
}());
var myObject = (function(){
var value = 0;
return {
getValue: function(){
return value;
}
}
})();
执行似乎返回相同的Object。即,myObject包含
{{
getValue: function(){
return value;
}
}}
两种情况。
我知道(function(){})()
之类的内容会执行,因为(function(){})
是一个返回函数的表达式,并且尾随()
执行了返回的函数。
但为什么这会执行(function(){}())
?我在这里期待语法错误。
答案 0 :(得分:5)
这些短语在功能上是相同的,()
的位置是一种品味问题,我看到的方向是支持另一方。我个人更喜欢
(function() { ... }());
该表单创建函数并在括号内执行。
(function() { ... })();
在括号内创建函数,然后执行它。
答案 1 :(得分:1)
它们完全相同。
至于为什么(function(){}())
没有给出语法错误但function(){}()
没有,我认为这是因为解析器遇到function
时会认为它是函数声明而不是函数表达式,但是当它看到()
时,它会抱怨,因为函数声明必须有一个名字。但是当它在(
之前首先看到function
时,这是一个函数声明,所以它认为它是一个函数表达式。
对于(function(){})()
,您只需在调用它之前将函数表达式括在括号中。