我看到人们经常使用这种模式:
(function() { })();
虽然我从未见过任何人使用过:
void function() { }();
有什么不同吗?
答案 0 :(得分:4)
主要的不同之处在于(function() { })();
可以返回值,如果有返回语句的话。 void function() { }();
将始终返回undefined。
var f = (function() { return true; })();
var v = void function() { return true; }();
console.log(f); // Will output `true`
console.log(v); // Will output `undefined`
答案 1 :(得分:0)
第一个创建一个空函数(函数表达式)并调用它。由于该函数没有任何return
statement,因此会返回undefined
。
(function() { })(); // undefined
(function() {
1+2+3;
"I don't have any `return` statement";
})(); // undefined
void
运算符接受一个参数,对其进行求值,并始终返回undefined
。在这种情况下,参数是一个函数表达式。该函数被评估并返回undefined
(同样,因为它没有return
),但忽略了返回的值。
void function() { }(); // undefined
void "trololo"; // undefined
所以他们是制作undefined
的方法。相反,我建议使用
undefined
,为清楚起见。请注意,它不是文字:it's a global variable。在ES3中,它是可以改变的,在ES5中它可以被遮蔽,因此可能不可靠。void 0
,简洁和可靠。