省略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呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
上面的 hfhan 已经解释了,实际上就是因为任何语句都有返回值(js 里面函数是一等公民,所以语句和表达式的分界线并不是那么明显)。
你可以在浏览器中输入
(i = 1)
看一下,结果为1
(这条语句的返回值),(i = 1, k = 2, z = 3)
的结果是3
,实际上只是省略了var
罢了如果箭头函数中只有一个语句,那么可以省略return,这里
(acc[cur] = (acc[cur] || 0) + 1), acc
就是一个语句,,
是起到了连接语句的作用,如var a,b,c
。所以函数可以看成