Are “(function ( ) { } ) ( )” and “(function ( ) { } ( ) )” functionally equal in JavaScript?
本问题已经有最佳答案,请猛点这里访问。
下面这两个代码块都警告
代码1:
1 2 3 4 5 6 7 | (function() { bar = 'bar'; alert('foo'); })(); alert(bar); |
代码2:
1 2 3 4 5 6 7 | (function() { bar = 'bar'; alert('foo'); }()); alert(bar); |
除了语法之外,还有什么区别吗?
没有;他们是相同的
但是,如果事先添加
代码1
1 2 3 | new (function() { this.prop = 4; }) ().prop; |
此代码创建此函数类的新实例,然后获取新实例的
它返回
它相当于
1 2 3 4 | function MyClass() { this.prop = 4; } new MyClass().prop; |
代码2
1 2 3 | new ( function() { return { Class: function() { } }; }() ).Class; |
此代码在
由于函数调用的括号在外部括号中,因此
它相当于
1 2 3 4 5 6 7 | var namespace = { Class: function() { } }; function getNamespace() { return namespace; } new ( getNamespace() ).Class; //Or, new namespace.Class; |
如果没有围绕
没有区别 - 开头括号只作为语法提示告诉解析器接下来是函数表达式而不是函数声明。
没有区别。两者都是函数表达式。
还有第三种方式:
1 2 3 4 | +function() { bar = 'bar'; alert('foo'); }(); |
(而不是
最常见的方式是
1 2 3 | (function() { // ... })(); |
虽然。