以下函数表达式之间的任何差异

时间:2015-08-29 18:52:23

标签: javascript

我看到人们经常使用这种模式:

(function() { })();

虽然我从未见过任何人使用过:

void function() { }();

有什么不同吗?

2 个答案:

答案 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,简洁和可靠。