省略return语句的箭头函数的返回值的疑问

今天在.codewars刷题的时候遇到一道题,其中关于箭头函数的返回值有点疑问,为什么这里reduce

function solve(files) {
  let total = files
    .map(file => file.match(/\.\w+$/)[0])
    .reduce((acc, cur) => ((acc[cur] = (acc[cur] || 0) + 1), acc), {});
   return total;
}

这里省略了return语句,但是括号里面有两条语句,为什么会返回acc呢?

回复
阅读 3.1k
2 个回答

如果箭头函数中只有一个语句,那么可以省略return,这里(acc[cur] = (acc[cur] || 0) + 1), acc就是一个语句,,是起到了连接语句的作用,如var a,b,c

所以函数可以看成

function(acc, cur){
    return ((acc[cur] = (acc[cur] || 0) + 1), acc)
}

上面的 hfhan 已经解释了,实际上就是因为任何语句都有返回值(js 里面函数是一等公民,所以语句和表达式的分界线并不是那么明显)。
你可以在浏览器中输入 (i = 1) 看一下,结果为 1(这条语句的返回值),(i = 1, k = 2, z = 3) 的结果是 3,实际上只是省略了 var 罢了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏