javascript - 箭头函数中多个表达式不带花括号的做法是什么

标签 javascript ecmascript-6 functional-programming

我喜欢探索 JavaScript 的局限性,想知道是否可以在最后一个表达式为 return 语句的地方使用箭头函数。

幸运的是这是可能的,但在同一范围内设置变量有一些缺点。

[1,2,3,4,5].reduce((sum, element) => (const doubleSum=sum+sum, doubleSum+element));

这返回未识别的标识符(指的是doubleSum)

解决办法就是这样写

let doubleSum; 
[1,2,3,4,5].reduce((sum, element) => (doubleSum=sum+sum, doubleSum+element));

所以现在没有 curly backet 我可以通过在函数中包含两个表达式来获得 sum+sum+element 的总和。这不是一个很好的示例用法,但它展示了如何在没有大括号的情况下使用 2 个表达式。

结果将是 57,因为它每次迭代只返回 doubleSum+element。如果您想将其拆分为更具可读性的部分,这将非常适合计算。

另一个例子是记录每次迭代的结果而不必使用大括号

[1,2,3,4,5].reduce((sum, element) => (console.log(sum), sum+sum+element));
//1
//4
//11
//26
//57

我真的很喜欢这种语法,但我想知道这是否是一种不好的做法,因为 Arrow functions 上没有提到它

最佳答案

I wonder if it is bad practice

是的,在数组函数范围之外声明 doubleSum 绝对是一种不好的做法。不要那样做。

Another example is to use console.log without curly brackets. I really like this syntax, but it isn't mentioned on Arrow functions

是的,那是因为它不是特定于箭头函数的。你只是在使用 grouping syntaxcomma operator这里。一些类似的用法可以在 Processing and then returning usage example 中找到那里。

关于javascript - 箭头函数中多个表达式不带花括号的做法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48973691/

相关文章:

javascript - 为什么以及何时我们需要在 React 中绑定(bind)函数和事件处理程序?

javascript - 如何从具有特定 id 的数组中获取对象并与另一个数组数字进行比较

javascript - 当我使用括号表示法添加键/值对时,为什么 Map size 属性不更新?

ruby - Ruby 中有标识函数吗?

.net - MailboxProcessor 性能问题

javascript - 在respond_to或redirect_to之后缺少模板

javascript - JavaScript 对象分组和自定义

function - 将函数作为参数传递 - lambda 表达式错误?

javascript - 如果主体具有类,则触发 Greensock 动画

javascript - 获取当前运行的 QUnit 测试的标题(名称)