繁体   English   中英

可以缩短此箭头功能吗? 这些都一样吗?

[英]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()

https://repl.it/JEGD/1

1和2 几乎相同。

当您在箭头的RHS上提供一条语句(而不是一个块)时,该函数将返回评估该语句的结果。

在第一个示例中,该函数返回undefined因为没有return语句。

在第二个示例中,该函数返回undefined因为console.log返回undefined

这里没有实际的区别,但在类似情况下可能会有区别。


至于第三个例子……

在情况1中,您将创建一个带有函数表达式的函数。

在情况2中,您将创建一个带有箭头功能的功能。

在情况3中,您根本不会创建函数。

立即调用console.log并将其返回值(如上所述,它是undefined )分配给doSomething

obj3.doSomething()无法操作的原因是,您正在将对象的doSomething属性分配给console.log(...)返回值 由于console.log不返回任何内容,因此仅执行并将doSomething空。

但是obj1obj2本质上是同一件事。 如果要将obj2 console.log替换为(x) => x * x ,则意味着隐含且不需要return ,但是像您在obj1{}的函数体包含obj1 ,则仍然需要使用return关键字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM