我一直在研究由一些我不知道的开发人员编写的现有项目。浏览javascript文件,我发现他们使用这个特定的表示法来定义函数:
var ModuleScripts = (function() {
return {
init: function(){...}
};
}())
注意括号function(){...}()
的括号。这段代码完美无缺,但是当我想写一些类似的东西时,我会使用这种表示法:
var ModuleScripts = function() {
return {
init: function(){...}
};
}()
我的代码也很完美。所以我的问题是:是否有充分的理由在JavaScript中使用括号function(){...}()
?
答案 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(){}() )