Javascript 为什么代码在里面=>;{}需要一个返回值,其中的内容=>;不';T

Javascript 为什么代码在里面=>;{}需要一个返回值,其中的内容=>;不';T,javascript,ecmascript-6,Javascript,Ecmascript 6,我对Ecmascript 6比较陌生。最近,我有了一个发现。我可以打开此提取功能: store.fetchList = () => { const Document = Parse.Object.extend('Document') const query = new Parse.Query(Document) return query.find().then((results) => { return _.map(results, (result) =>

我对Ecmascript 6比较陌生。最近,我有了一个发现。我可以打开此提取功能:

store.fetchList = () => {
  const Document = Parse.Object.extend('Document')
  const query = new Parse.Query(Document)
  return query.find().then((results) => {
    return _.map(results, (result) => {
      return result.toJSON()
    })
  })
}
这样做(如果移除花括号,只需第一次返回):


为什么会这样?Ecmascript 5的版本是什么?

如果箭头函数只有一个表达式,那么

  • 您不需要创建函数体

  • 默认情况下,将返回该表达式的值

  • JavaScript版本是什么

    ECMAScript 6是JavaScript。如果您想要获得ECMAScript 5的等效版本,那么就没有等效版本


    如果有多个表达式,则

  • 我们需要将它们封装在
    {
    }
    中,基本上我们需要创建一个块(函数体)

  • 我们需要显式地返回值


  • 如果我们看一下ES6中箭头函数的规范,我们会发现

    arrow函数[In,Yield]:
    箭头参数[?产量][此处无线条终止符]=>ConciseBody[?英寸]
    简明的,简明的
    [展望未来≠ {]赋值表达式[?In]
    {FunctionBody}
    
    正如我们在这里看到的,您可以使用
    {FunctionBody}
    表单,也可以使用
    AssignmentExpression
    表单(您没有
    {
    }
    ),但是如果您使用
    FunctionBody
    表单,则需要显式返回值。

    请注意

    (result) => {
      return result.toJSON()
    }
    

    将写为:

    (function(result) {
        return result.toJSON();
    }).bind(this)
    

    在ES5中。

    因为这是规范。任何关于箭头函数的讨论都会涉及到这一点。从MDN页面:箭头函数可以有“简明体”或通常的“块体”。块体表单不会自动返回值。您需要使用明确的返回语句。如果您要问为什么这是规范,您必须询问委员会成员或查看他们的审议记录。
    (result) =>
      result.toJSON()
    
    (function(result) {
        return result.toJSON();
    }).bind(this)