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

发布于 2022-09-11 19:04:00 字数 312 浏览 11 评论 0

今天在.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呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

山人契 2022-09-18 19:04:00

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

記憶穿過時間隧道 2022-09-18 19:04:00

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

所以函数可以看成

function(acc, cur){
    return ((acc[cur] = (acc[cur] || 0) + 1), acc)
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文