javascript - 函数可以在没有花括号的情况下工作,并且不能与它们一起工作,为什么?
问题描述
我正在做 FreeCode 训练营的练习,这让我很困惑:
const squareList = arr =>
arr
.filter(num => num > 0 && num % parseInt(num) === 0)
.map(num => Math.pow(num, 2));
const squaredIntegers = squareList([4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2]);
console.log(squaredIntegers);
这可以正常工作,但是如果我输入:
const squareList = arr => {
arr
.filter(num => num > 0 && num % parseInt(num) === 0)
.map(num => Math.pow(num, 2));
}
const squaredIntegers = squareList([4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2]);
console.log(squaredIntegers);
在许多功能中通常使用的典型大括号,它不起作用。为什么?
解决方案
一个是一组statements
(带花括号),另一个是一个expression
(param1, param2, …, paramN) => { statements } // needs to return something
(param1, param2, …, paramN) => expression
// equivalent to: => { return expression; }
所以当你使用第一种形式时,你需要从中得到return
一些东西
所以在你的非工作案例中,它应该是一个return
声明
const squareList = arr => {
return arr
.filter(num => num > 0 && num % parseInt(num) === 0)
.map(num => Math.pow(num, 2));
}
任何可以计算为值的代码单元都是一个表达式。
语句是执行特定操作的指令或指令集
更详细的解释在Mozilla 文档中
推荐阅读
- c# - 我如何知道我的 WAV 数据在 WAV 文件中从哪里开始,以便我可以读取它之前的 XML?
- java - 在 java Mockito 中模拟 httpclient v4
- python-3.x - 如何使 tkinter::pack() 将标签放在下面程序的左上角?
- css - CSS 内容属性中的 SVG 精灵
- javascript - React useState 无法更新双向绑定
- android - 如何禁用片段的过渡?
- python - 通过创建处理程序类避免重复代码
- haskell - 是否可以在 Haskell 中否定类型参数约束?
- r - r 在 ggplot2 中放大尺寸时错误地显示形状文件
- for-loop - 嵌套的 For 循环仅在批处理文件中运行外循环