这两个代码块都低于 alert foo
then bar
。唯一的区别是})()
和}())
。
代码 1:
(function()
{
bar = 'bar';
alert('foo');
})();
alert(bar);
代码 2:
(function()
{
bar = 'bar';
alert('foo');
}());
alert(bar);
那么除了语法之外还有什么区别吗?
这两个代码块都低于 alert foo
then 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() {
// ...
})();
尽管。