【问题标题】:Return value using arrow syntax [duplicate]使用箭头语法返回值[重复]
【发布时间】:2018-08-17 19:20:15
【问题描述】:

所以在我看来,目前明显错误的是,

return arg => arg*2

一样
return (arg)=>{arg*2}

我一直认为箭头函数在语法上更简洁。

但是用这样的闭包来做这件事是行不通的。

function addTwoDigits(firstDigit){
    return (secondDigit)=>{firstDigit + secondDigit}
}
let closure = addTwoDigits(5);
console.log(closure(5)) // Undefined

这很好

function addTwoDigitsV2(firstDigit){
    return secondDigit => firstDigit + secondDigit
}
let closure2 = addTwoDigitsV2(10);
console.log(closure2(10))// 20

【问题讨论】:

  • 感谢您的所有回答,当时间限制消退时,我会将此问题标记为已回答,感谢您的帮助。
  • 闭包这个词在这个问题中有点红鲱鱼,因为这个问题与闭包没有任何关系,而是一个语法问题。

标签: javascript closures arrow-functions


【解决方案1】:

箭头函数在这里的工作方式不同:-

(x)=> x*2 ; // dont have to return anything, x*2 will be returned
is not same as 
(x) =>{x*2}
//here you need to return something otherwise undefined will be returned

【讨论】:

  • 在任何地方都看不到正确的术语,所以我想我会认为第一个示例是 implicit return 的示例,箭头函数支持该示例。
【解决方案2】:

使用 {} 时必须设置 return

return (arg)=>{return arg*2}

【讨论】:

    【解决方案3】:

    如果箭头后面有表达式,箭头函数只会自动提供return。如果箭头后面跟着一个花括号,它被视为函数体周围的花括号,所以你必须明确写return,即

    arg => arg * 2
    

    相当于:

    (arg) => { return arg * 2; }
    

    function addTwoDigits(firstDigit) {
      return (secondDigit) => {
        return firstDigit + secondDigit
      }
    }
    let closure = addTwoDigits(5);
    console.log(closure(5))

    【讨论】:

      【解决方案4】:

      如果箭头函数的主体包含在 { ... } 中,则需要 return 语句。

      由于您的是单个表达式,您可以跳过 {-}return。但是如果你有{-},你需要return声明。

      括号在这里不是问题。如果您有多个参数,则需要它们。有一个,它们是可选的。

      【讨论】:

      • 谢谢你把事情弄清楚了,非常感谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 2018-06-15
      • 1970-01-01
      • 2016-02-14
      • 2016-04-14
      相关资源
      最近更新 更多