• 3
  • 新人请关照

省略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呢?

阅读 979
评论
    2 个回答
    • 12k

    如果箭头函数中只有一个语句,那么可以省略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 罢了

        撰写回答

        登录后参与交流、获取后续更新提醒