void
operator上的MDN文章提到了一种声明立即调用的函数表达式(IIFE)的聪明方法。
void function() {
console.log('hello');
}();
// is the same as...
(function() {
console.log('hello');
})();

我认为使用void
看起来非常不错。传统的IIFE有很多括号,我觉得这看起来很混乱。
然后我尝试使用arrow function重写此代码。
void () => {
console.log('hello');
}();
这不解析。 Chrome说," Uncaught SyntaxError:意外的令牌)"在第1行,定义了箭头功能。 Firefox说,"语法错误:无效的箭头函数参数(箭头函数周围的括号可能有帮助)"。
当函数未被调用时,它甚至无法解析。
void () => {
console.log('hello');
};
我已尝试阅读此内容(包括其他SO问题,如this one和this one)。
我想这与箭头功能是AssignmentExpressions有关...?但是我试图跟随ECMA-262 specification迷失了。
答案 0 :(得分:5)
我会说Paul S. explained why:箭头函数的“operator precedence”非常低,它们不能用作其他运算符的操作数,除了赋值,yield
和逗号运算符。这样做是为了让你仍然可以在简洁的机构中使用所有其他运算符,并且它们仍然易于解析。
要将它们传递给void
运算符,您必须将它们包装在分组括号中(这当然会违背使用void
进行IIFE的要点。)