带花括号的代码和不带花括号的代码之间的区别

时间:2019-05-08 12:27:15

标签: javascript arrow-functions

当我将花括号与javascript一起使用时,我得到了意外的结果。我正在寻找是否有人可以帮助我了解发生了什么事情?

const ages = [3, 10, 18, 20]
let x
x = ages.some( (a) => a===18)  // x is true
x = ages.some( (a) => {a===18})  // x is false

奇怪为什么我添加花括号时x结果为false。有人可以帮忙解释吗?

5 个答案:

答案 0 :(得分:1)

箭头函数有一些叫做隐式返回的东西。

因此,如果您将表达式写为箭头函数的主体,它将自动返回结果。

因此,对于x = ages.some( (a) => a===18),支票a === 18作为结果自动返回。就像您写过x = ages.some( (a) => { return a === 18; })一样。

对于带有方括号的版本,您无需添加返回值,因此即使a等于18,它也始终会返回未定义的值。您需要显式返回才能使其正常工作,如上所示。

如果至少一个元素为回调返回true,则

Array.some()函数将返回true。如此写,不用括号,您将为第三个数组元素返回true,为其他数组元素返回false,从而为变量true返回x

在带括号的版本中,由于该函数不返回任何内容,因此始终返回undefined。对于所有值,Undefined都将强制转换为false,因此最终结果是变量x也为false。

答案 1 :(得分:0)

没有花括号,您的函数体将被限制为单个表达式,并且返回值将自动成为该表达式的结果。

但是使用{ }时,该函数的行为类似于任何其他代码块:除非您使用显式的{{,否则它不会隐式返回值(即其值为undefined)。 1}}语句。

return等效于(x) => x + 1

答案 2 :(得分:0)

使用花括号时,必须返回结果,否则返回未定义,这意味着{a===18}将始终被视为false。 您应该写

x = ages.some( (a) => {return a===18})

答案 3 :(得分:0)

=>不带花括号,它返回a===18布尔值

但是在第二种情况下,您需要返回该值,例如x = ages.some( (a) => {return a===18})

答案 4 :(得分:0)

这是一个很好的示例,说明了可以用JS编写函数的不同方式以及它们如何工作。基本上请记住,箭头功能没有,花括号只是return的简写。

() => { return 'foo'; }() => 'foo';

//regular function with no return value
var a = 'bar';
const myFunc1 = function() { a = 'foo'; }
console.log(myFunc1(), a);

//regular function with a return value
a = 'bar';
const myFunc2 = function() { return a = 'foo'; }
console.log(myFunc2(), a);

//arrow function with a return value
a = 'bar';
const myFunc3 = () => { return b = 'foo'; }
console.log(myFunc3(), a);

//arrow function with no return value
a = 'bar';
const myFunc4 = () => { b = 'foo'; }
console.log(myFunc4(), a);

//arrow function using shorthand, which has an implicit return value
a = 'bar';
const myFunc5 = () => b = 'foo';
console.log(myFunc5(), a);