第一个返回对匿名构造函数的新构造实例的引用(=this
).
第二个返回匿名函数的返回值。由于您的函数没有 return 语句,因此它将隐式返回 undefined。
请尝试以下操作:
var t1 = new function(obj) { console.log(obj); }(extObj);
var t2 = (function(obj) { console.log(obj); })(extObj);
typeof t1 => "object"
typeof t2 => "undefined"
(Btw, t1.constructor
将返回您创建的原始函数t1
with.)
如果添加 return 语句,差异就会变得更加明显:
var t1 = new function(obj){ return(obj); }("foo");
var t2 = (function(obj){ return(obj); })("bar");
console.log(t1) => "object"
console.log(t2) => "bar"
国际海事组织,这使得(function)()
对于日常用例来说更有用 - 您将此函数执行的返回值分配给变量,如果您正在使用立即调用的函数,这通常是您想要的。特别是当有更复杂的事情时,例如(伪代码):
var myNameSpace = (function(){
/* do some private stuff here*/
...
/* expose parts of your anonymous function by returning them */
return{
functionX,
variable1,
variable2
}
}();
基本上,您可以使用任意一元运算符将函数声明转换为立即调用的表达式。所以你也可以写:
!function(){ /* code */ }();
~function(){ /* code */ }();
-function(){ /* code */ }();
+function(){ /* code */ }();
根据函数的返回语句,它们将给出不同的返回结果。!
- 否定返回值+|-
评估为数字(应用负号)~
apply bitwise not
到返回值。