闭包和箭头语法

时间:2018-08-17 19:20:15

标签: javascript closures arrow-functions

据我所知,这时显然是错误的,

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

4 个答案:

答案 0 :(得分:3)

箭头功能在这里的作用不同:-

(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

答案 1 :(得分:2)

使用{}时必须设置return

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

答案 2 :(得分:1)

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

由于您是一个表达式,因此可以跳过{-}return。但是,如果您有{-},则需要return语句。

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

答案 3 :(得分:1)

箭头功能仅在箭头后面有表达式时才自动提供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))