均低于警戒这些代码块foo,然后bar。唯一的区别是})()和}())。
foo
bar
})()
}())
代码1:
(function() { bar = 'bar'; alert('foo'); })(); alert(bar);
代码2:
(function() { bar = 'bar'; alert('foo'); }()); alert(bar);
那么,除了语法之外,还有什么区别吗?
没有; 他们是相同的
但是,如果在new前后添加.something,它们将有所不同。
new
.something
new (function() { this.prop = 4; }) ().prop;
此代码创建此函数的类的新实例,然后获取prop新实例的属性。 它返回4。
prop
4
相当于
function MyClass() { this.prop = 4; } new MyClass().prop;
new ( function() { return { Class: function() { } }; }() ).Class;
此代码调用new该Class属性。 由于函数调用的括号位于括号的外部集之内,因此new表达式不会选择它们,而是正常调用该函数,并返回其返回值。 该new表达式解析到.Class并将其实例化。(后面的括号new是可选的)
Class
.Class
var namespace = { Class: function() { } }; function getNamespace() { return namespace; } new ( getNamespace() ).Class; //Or, new namespace.Class;
如果没有对的括号getNamespace(),则将其解析为(new getNamespace()).Class—它将实例化getNamespace该类并返回Class新实例的属性。
getNamespace()
(new getNamespace()).Class
getNamespace