为什么在第二个排序函数中添加{}"中断";排序(改回按字母顺序排序?(:
console.log([10, -2, 49].sort((a,b) => a-b))
console.log([10, -2, 49].sort((a,b) => {a-b}))
这更像是JS为什么要做这种类型的问题,而不是修复我的代码类型的问题。
javascript中排序方法的回调函数需要返回一个值,当你把{}
放在函数内容周围时,你实际上是从函数中返回undefined
,而函数中的代码只是在它内部执行的一个表达式
当您使用{}
时,您需要一个显式的返回语句来返回值
console.log([10, -2, 49].sort((a,b) => a-b))
console.log([10, -2, 49].sort((a,b) => {return a-b;}));
在第一种情况下,它是有效的,因为当您使用该语法编写函数时,它会有一个隐式返回。
你可以在这篇文章中了解更多关于显式和隐式返回的信息:
箭头函数和括号((或{}或({}(的使用
好吧,这是常见的混淆/功能1
const func = (a,b ) => a+b
相当于,功能2
const func = (a,b) => {
return (a+b)
}
因此,当使用大括号时,必须显式使用return
关键字,其中使用()
不需要使用return
关键字。
当您有一个箭头函数(=>
(时,您可以有自动返回表达式的单行语句,也可以有多行语句,它们需要在语句周围使用{}
,因此需要return
。通过添加{}
,您得到了多行语句形式。因此,您需要在大括号内添加一个return,否则将不返回任何内容。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
注意,如果您想从单行数组函数语句中返回一个对象,请将其括在括号中:
((a, b) => ({ c: a + b }))(1, 2) // {c: 3}