[英]Can this arrow function be shortened? Are these the same?
如果我从这个开始:
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()
1和2 几乎相同。
当您在箭头的RHS上提供一条语句(而不是一个块)时,该函数将返回评估该语句的结果。
在第一个示例中,该函数返回undefined
因为没有return
语句。
在第二个示例中,该函数返回undefined
因为console.log
返回undefined
。
这里没有实际的区别,但在类似情况下可能会有区别。
至于第三个例子……
在情况1中,您将创建一个带有函数表达式的函数。
在情况2中,您将创建一个带有箭头功能的功能。
在情况3中,您根本不会创建函数。
您立即调用console.log
并将其返回值(如上所述,它是undefined
)分配给doSomething
。
obj3.doSomething()
无法操作的原因是,您正在将对象的doSomething
属性分配给console.log(...)
的返回值 。 由于console.log
不返回任何内容,因此仅执行并将doSomething
空。
但是obj1
和obj2
本质上是同一件事。 如果要将obj2
console.log
替换为(x) => x * x
,则意味着隐含且不需要return
,但是像您在obj1
将{}
的函数体包含obj1
,则仍然需要使用return
关键字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.