Javascript 中的等号和大于号 (=>) 是什么意思?

What does it mean equal and greater-than sign (=>) in Javascript?

在 Meteor Whatsapp 示例项目中,文件中使用了“=>”,但我的 WebStorm IDE 将其检测为错误。我找不到关于此语法的任何文档。

chats.forEach( chat => {
  let message = Messages.findOne({ chatId: { $exists: false } });
  chat.lastMessage = message;
  let chatId = Chats.insert(chat);
  Messages.update(message._id, { $set: { chatId: chatId } })
});

GitHub repository for bootstrap.js file is here

什么是“=>”?

那是 es6 arrow function。如果您切换到 WebStorms 设置:

您可以将 javascript 版本切换到 ecmascript 6,如图所示,以使 WebStorm 正确识别它们。


我本来打算对这个问题投反对票,但事实证明,如果您还不知道它叫什么,谷歌搜索答案就会出奇地困难。正如您在评论中的 link 中看到的那样,这是一个粗箭头函数(有时简称为箭头函数)。

箭头函数有一些confusing方面,所以我会打一些亮点:

普通函数有一个 this 指针集,具体取决于上下文:使用 new 调用的函数将其设置为新创建的对象,作为方法调用的函数将其绑定到对象方法被调用,否则它绑定到 undefined 或全局对象(取决于 'strict mode' pragma),当然可以用 Function.prototype.bind et al.

设置

但是箭头函数对运行时创建的 this 指针没有绑定(也不能通过 Function.prototype.bind 指定),这意味着它像任何一样通过作用域链解析在词法上查找其他变种。 MDN 文章在这一点上充其量只是有点混乱(参见上面的 link)。

此外,箭头函数有一个隐含的 return,return 值将自动成为函数体中最后计算的表达式。

箭头函数没有 arguments 伪数组。您可以改用 ES 6 剩余参数。

对于 arity 1 的函数,参数周围的括号可以省略。