这两个javascript结构之间有什么区别

时间:2013-05-06 03:54:24

标签: javascript

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(){}())?我在这里期待语法错误。

2 个答案:

答案 0 :(得分:5)

这些短语在功能上是相同的,()的位置是一种品味问题,我看到的方向是支持另一方。我个人更喜欢

(function() { ... }());

该表单创建函数并在括号内执行。

(function() { ... })();

在括号内创建函数,然后执行它。

答案 1 :(得分:1)

它们完全相同。

至于为什么(function(){}())没有给出语法错误但function(){}()没有,我认为这是因为解析器遇到function时会认为它是函数声明而不是函数表达式,但是当它看到()时,它会抱怨,因为函数声明必须有一个名字。但是当它在(之前首先看到function时,这是一个函数声明,所以它认为它是一个函数表达式。

对于(function(){})(),您只需在调用它之前将函数表达式括在括号中。