如何解释reduce下的箭头函数的返回值代码

我的代码:

let ret={sum:0}
const sum = [1, 2, 3, 4].reduce((prev, cur)=>{
  prev.sum += cur
  return prev
},ret) 

高手写的代码:

let ret={sum:0}
const sum = [1, 2, 3, 4].reduce((prev, cur)=>(prev.sum += cur,prev),ret) 

这里我有两个地方不明白:
1:为什么(prev.sum += cur,prev)和{ prev.sum += cur;return prev } 是等效的?
2:为什么const sum = [1, 2, 3, 4].reduce((prev, cur)=>(prev.sum += cur,prev),ret) 这句去掉“const sum = ”就报:“TypeError: Cannot read property 'reduce' of undefined”?

阅读 2.4k
1 个回答

首先 这样也是可以运的

[1, 2, 3, 4].reduce((prev, cur)=>(prev.sum += cur,prev),ret)

报错是因为你上面的 let ret={sum:0} 省略的行尾的分号导致的。

clipboard.png

(prev, cur)=>(prev.sum += cur,prev)

再来说这一段,在箭头函数中,这样写就相当于是。

(prev, cur)=>{
    return prev.sum += cur,prev;
}

因为 逗号操作符 - JavaScript | MDN 的原因,所以总是返回右边的内容。

即相当于

(prev, cur)=>{
    prev.sum += cur;
    return prev;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题