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

时间:2017-06-27 15:32:20

标签: javascript syntax ecmascript-6 member-functions

如果我从这开始:

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

2 个答案:

答案 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留空。

然而,

obj1obj2基本上是相同的。如果您要使用console.log替换obj2中的(x) => x * x,则隐含return,而不是必需的,但是{}中的函数正文就像你有然后,在obj1中仍然需要使用return关键字。