为什么在排序函数中添加{}会改变答案



为什么在第二个排序函数中添加{}"中断";排序(改回按字母顺序排序?(:

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}

最新更新