ES6:为什么我对括号的错位仍然产生相同的结果?

时间:2018-12-28 08:25:40

标签: javascript ecmascript-6

我注意到我的一个forEach语句中都有一个类型,但是我仍然得到相同的结果。

foo = ["bobby", "tommy", "brendan"]

foo.forEach((f => {
    console.log(f)
}))

vs. 

foo.forEach((f) => {
    console.log(f)
})

我很好奇为什么第一个输入的结果是相同的,我做了错字。

2 个答案:

答案 0 :(得分:4)

带有一个参数的箭头函数可以用两种方式编写:

f => {
    console.log(f)
}

(f) => {
    console.log(f)
}

因此,如果只有一个参数,则参数部分周围的花括号是可选的。

并在完整表达式周围放置花括号不会更改该表达式的任何内容,这是

f => {
    console.log(f)
}

还有这个

(f => {
    console.log(f)
})

甚至是这个

((f => {
    console.log(f)
}))

相同。

您的第一个代码块可以这样格式化,以便更好地理解:

foo.forEach(
   // first argument of forEach
   (f => {
      console.log(f)
   })
   // end of argument list of forEach
)

所以没有大括号放错地方,您只需删除f周围的可选括号,然后将可选变量放在整个表达式周围。

答案 1 :(得分:0)

foo.forEach((f => {
    console.log(f)
}))

forEach接受两个参数(第一个是方法/函数,第二个是可选的,在执行回调时,该值用作this对象),不需要将其用()括起来。尽管具有箭头功能,但是如果您有一个参数,则不需要用()显式地包装它,但是如果您的方法有多个参数,则需要包装参数。

您可以检出this来进一步阅读箭头功能,并在js中thisforEach