var foo = function(){...}()和var foo =(function(){...}())之间的区别

时间:2015-12-11 15:30:46

标签: javascript

我一直在研究由一些我不知道的开发人员编写的现有项目。浏览javascript文件,我发现他们使用这个特定的表示法来定义函数:

var ModuleScripts = (function() {
  return {
    init: function(){...}
  };
}())

注意括号function(){...}()的括号。这段代码完美无缺,但是当我想写一些类似的东西时,我会使用这种表示法:

var ModuleScripts = function() {
  return {
    init: function(){...}
  };
}()

我的代码也很完美。所以我的问题是:是否有充分的理由在JavaScript中使用括号function(){...}()

2 个答案:

答案 0 :(得分:4)

来自Immediately-invoked function expression

  

立即调用的函数表达式可以写入多个   不同的方式,虽然一个共同的惯例是将两者都包括在内   函数表达式和括号中的调用。

答案 1 :(得分:1)

如果它是IIFE,它会立即执行,而ModuleScripts将是一个带有init()函数的对象。没有IIFE,ModuleScripts是一个返回对象的函数!很多时候IIFE用于保护名称空间,似乎他们试图在这里做,但没有做对。

(!)乍一看它看起来像是一个IIFE,但实际上我认为你的例子中的括号与IIFE不同,并且被抛弃了。所以你最终看到他们什么都不做。注意区别。

IIFE立即调用函数表达式:

(function() {
  // the code here is executed once in its own scope
})();

你的例子:

var ModuleScripts = (function() {
  return {
    init: function(){...}
  };
}())

更简单地说IFFE是

(function x(){})()

你正在看

(  function x(){}()  )