对于其中一个,“()”在里面,另一个在外面.他们来了:
var a = (function() { return { bla: function() { console.log('a'); } }; } () ); var b = (function() { return { bla: function() { console.log('b'); } }; }) (); a.bla(); b.bla();
解决方法
没有区别.
[不必要的]括号只在不同的地方.函数声明已经是表达式,因为它位于它的位置.如果声明在语句上下文中(而且讽刺的是它们会将其转回到表达式上下文中),那么括号将会产生不同的效果,同时仍然导致等效的代码,而不是.
在类似情况下常用的括号是自调用函数.在这种情况下,括号是必需的
function x () { alert("hi!") } ()
被解析为
function x () { alert("hi!") }; ()
当它显示为语句 – 或“块的顶级元素”时,它被解析为“FunctionDeclaration”.因此,通常使用以下形式:
(function () { alert("hi!") })()
这是因为函数…不再是上述的语句,而是一个表达式(被解析为“FunctionExpression”),并且表达式可以继续,所以Automatic Semicolon Insertion不像以前的情况那样发生.另请注意,功能名称可以省略.
然而,因为在post中,函数…出现在a的右边(在“AssignmentExpression”中),因此它已经在表达式上下文中(被解析为“FunctionExpression”),因此没有附加的括号是需要.
所有这些都是相同的,但我更喜欢第二种形式(为了我的代码中的一致性):
a = function () {} () b = (function () {}) () c = (function () {} ())
快乐编码.