为什么我不能制作空箭头功能?

时间:2018-01-20 19:49:41

标签: javascript

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 onethis one)。

我想这与箭头功能是AssignmentExpressions有关...?但是我试图跟随ECMA-262 specification迷失了。

1 个答案:

答案 0 :(得分:5)

我会说Paul S. explained why:箭头函数的“operator precedence”非常低,它们不能用作其他运算符的操作数,除了赋值,yield和逗号运算符。这样做是为了让你仍然可以在简洁的机构中使用所有其他运算符,并且它们仍然易于解析。

要将它们传递给void运算符,您必须将它们包装在分组括号中(这当然会违背使用void进行IIFE的要点。)