0
var myObject = (function(){

  var value = 0;

  return {
    getValue: function(){
      return value;
    }
  }

}());



var myObject = (function(){

  var value = 0;

  return {
    getValue: function(){
      return value;
    }
  }

})();

执行似乎返回相同的对象。即,myObject 包含

  {{
    getValue: function(){
      return value;
    }
  }}

在这两种情况下。

我知道类似(function(){})()执行的东西,因为(function(){})它是一个返回函数的表达式,而尾随则()执行了返回的函数。

但是为什么会执行(function(){}())呢?我期待这里出现语法错误。

4

2 回答 2

5

这些短语在功能上是相同的,the 的位置()是一个品味问题,我已经看到了有利于另一个的方向。个人比较喜欢

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

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

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

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

于 2013-05-06T03:55:56.353 回答
1

它们是相同的。

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

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

于 2013-05-06T04:01:36.507 回答