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

Dan*_*ich 8 javascript

关于void运算符的MDN文章提到了一种声明立即调用的函数表达式(IIFE)的巧妙方法.

void function() {
    console.log('hello');
}();

// is the same as...

(function() {
    console.log('hello');
})();
Run Code Online (Sandbox Code Playgroud)

我觉得使用void这个看起来很不错.传统的IIFE有很多括号,我觉得这看起来很混乱.

然后我尝试使用箭头函数重写此代码.

void () => {
    console.log('hello');
}();
Run Code Online (Sandbox Code Playgroud)

这不解析.Chrome在第1行显示"Uncaught SyntaxError:Unexpected token",其中定义了箭头函数.Firefox说,"SyntaxError:无效的箭头 - 函数参数(箭头函数周围的括号可能有帮助)".

它在调用函数时甚至不解析.

void () => {
    console.log('hello');
};
Run Code Online (Sandbox Code Playgroud)

我已经尝试过阅读这个(包括其他SO问题,比如这一个这一个).

我想这与箭头函数AssignmentExpressions有关...?但我迷失了试图遵循ECMA-262规范.

Ber*_*rgi 5

我要说保罗S.解释了原因:箭头函数具有非常低的" 运算符优先级 ",除了赋值yield和逗号运算符之外,它们不能用作其他运算符的操作数.这样做是为了让你仍然可以在简洁的机构中使用所有其他运算符,并且它们仍然很容易解析.

要将它们传递给void操作员,您必须将它们包装在分组括号中(这当然会破坏voidIIFE 的使用点).