这两个代码块都低于 alert foothen bar。唯一的区别是})()和}())。
代码 1:
(function()
{
bar = 'bar';
alert('foo');
})();
alert(bar);
代码 2:
(function()
{
bar = 'bar';
alert('foo');
}());
alert(bar);
那么除了语法之外还有什么区别吗?
这两个代码块都低于 alert foothen bar。唯一的区别是})()和}())。
代码 1:
(function()
{
bar = 'bar';
alert('foo');
})();
alert(bar);
代码 2:
(function()
{
bar = 'bar';
alert('foo');
}());
alert(bar);
那么除了语法之外还有什么区别吗?
不; 它们是相同的
但是,如果您new前后添加.something,它们会有所不同。
new (function() {
this.prop = 4;
}) ().prop;
此代码创建此函数类的新实例,然后获取prop新实例的属性。
它返回4。
它相当于
function MyClass() {
this.prop = 4;
}
new MyClass().prop;
new ( function() {
return { Class: function() { } };
}() ).Class;
此代码调用new该Class属性。
由于函数调用的括号在外括号组内,它们不会被new表达式拾取,而是正常调用函数,返回其返回值。
该new表达式解析到.Class和实例化。(后面的括号new是可选的)
它相当于
var namespace = { Class: function() { } };
function getNamespace() { return namespace; }
new ( getNamespace() ).Class;
//Or,
new namespace.Class;
如果调用 周围没有括号getNamespace(),这将被解析为(new getNamespace()).Class- 它将调用实例化getNamespace类并返回Class新实例的属性。
没有区别 - 左大括号仅用作句法提示,告诉解析器接下来是函数表达式而不是函数声明。
没有区别。两者都是函数表达式。
还有第三种方式:
+function() {
bar = 'bar';
alert('foo');
}();
(而不是+另一个操作员也可以工作)
最常见的方式是
(function() {
// ...
})();
尽管。