如果我从这开始:
const obj1 = {
doSomething: () => {
console.log('hello world 1');
},
};
可以安全缩短吗?这些都一样吗?
const obj2 = {
doSomething: () => console.log('hello world 2'),
};
为什么这个这么奇怪?
const obj3 = {
doSomething: console.log('hello world 3'),
};
我注意到obj3
自行运行,无法执行obj3.doSomething()
。
答案 0 :(得分:5)
1和2 差不多相同。
当您在箭头的RHS上提供语句(而不是块)时,该函数返回评估该语句的结果。
在第一个示例中,函数返回undefined
,因为没有return
语句。
在第二个示例中,函数返回undefined
,因为console.log
返回undefined
。
这里没有实际的区别,但可能存在类似情况。
至于第三个例子......
在案例1中,您使用函数表达式创建函数。
在第2种情况下,您可以使用箭头功能创建一个函数。
在案例3中,您根本不创建任何功能。
您立即致电console.log
,并将其返回值(如上所述undefined
)指定给doSomething
答案 1 :(得分:0)
obj3.doSomething()
无法运行的原因是因为您要将对象的doSomething
属性分配给console.log(...)
的返回值。由于console.log
不会返回任何内容,因此它只会执行并将doSomething
留空。
obj1
和obj2
基本上是相同的。如果您要使用console.log
替换obj2
中的(x) => x * x
,则隐含return
,而不是必需的,但是{}
中的函数正文就像你有然后,在obj1
中仍然需要使用return
关键字。