这个箭头函数可以缩短吗?这些是一样的吗?
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()
。
obj3.doSomething()
无法操作的原因是因为您正在将对象的 doSomething
属性 分配给 returned 值 共 console.log(...)
。由于 console.log
没有 return 任何东西,它只是执行并使 doSomething
为空。
obj1
和 obj2
本质上是一样的。如果您要将 obj2
中的 console.log
替换为 (x) => x * x
,那么 return
是隐含的并且不是必需的,但是像您一样围绕 {}
中的函数体在 obj1
中仍然需要使用 return
关键字。
1 和 2 几乎 相同。
当您在箭头的 RHS 上提供语句(而不是块)时,函数 return 是对该语句求值的结果。
在第一个例子中,函数returns undefined
因为没有return
语句。
在第二个例子中,函数returns undefined
因为console.log
returns undefined
.
这里没有实际区别,但在类似情况下可能会有区别。
至于第三个例子……
在情况 1 中,您使用函数表达式创建了一个函数。
在情况 2 中,您创建了一个带有箭头函数的函数。
在情况 3 中,您根本没有创建函数。
您立即console.log
并将其 return 值(正如我上面提到的,是 undefined
)分配给 doSomething
.
如果我以此开头:
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()
。
obj3.doSomething()
无法操作的原因是因为您正在将对象的 doSomething
属性 分配给 returned 值 共 console.log(...)
。由于 console.log
没有 return 任何东西,它只是执行并使 doSomething
为空。
obj1
和 obj2
本质上是一样的。如果您要将 obj2
中的 console.log
替换为 (x) => x * x
,那么 return
是隐含的并且不是必需的,但是像您一样围绕 {}
中的函数体在 obj1
中仍然需要使用 return
关键字。
1 和 2 几乎 相同。
当您在箭头的 RHS 上提供语句(而不是块)时,函数 return 是对该语句求值的结果。
在第一个例子中,函数returns undefined
因为没有return
语句。
在第二个例子中,函数returns undefined
因为console.log
returns undefined
.
这里没有实际区别,但在类似情况下可能会有区别。
至于第三个例子……
在情况 1 中,您使用函数表达式创建了一个函数。
在情况 2 中,您创建了一个带有箭头函数的函数。
在情况 3 中,您根本没有创建函数。
您立即console.log
并将其 return 值(正如我上面提到的,是 undefined
)分配给 doSomething
.