【问题标题】:Why can't I make a void arrow function?为什么我不能做一个空箭头函数?
【发布时间】:2018-06-29 20:02:40
【问题描述】:

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 在第 1 行显示“Uncaught SyntaxError: Unexpected token )”,其中定义了箭头函数。 Firefox 说,“语法错误:无效的箭头函数参数(箭头函数周围的括号可能会有所帮助)”。

当函数没有被调用时它甚至不解析。

void () => {
    console.log('hello');
};

我已尝试阅读此内容(包括其他 SO 问题,例如 this onethis one)。

我猜这与箭头函数是AssignmentExpressions...有关吗?但是我在尝试关注ECMA-262 specification 时迷路了。

【问题讨论】:

    标签: javascript


    【解决方案1】:

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

    要将它们传递给void 运算符,您必须将它们包装在分组括号中(这当然违背了将void 用于IIFE 的意义)。

    【讨论】:

    • “这当然违背了在 IIFE 中使用 void 的意义”。考虑到 JavaScript ASI 的糟糕设计,void 在您喜欢仅使用不带分号的 LF 终止语句并且不喜欢在行首使用分号时很有帮助。
    猜你喜欢
    • 2017-08-28
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多