如何在Javascript中使用单行返回函数中的值?

如何在Javascript中使用单行返回函数中的值?,javascript,function,ecmascript-6,Javascript,Function,Ecmascript 6,这项工作: var power = (x)=>x*x 这同样有效:它返回一个带有qty:1属性的对象 let addQty = (payload)=>{payload.qty=1;return payload} 但这并不是: let addQty2 = (payload)=>{return payload.qty=1} 而是返回1。 为什么? ps:我知道我可以在如下语句后返回值: 让addQty2=payload=>{payload.qty=1;返回payload;}

这项工作:

var power = (x)=>x*x
这同样有效:它返回一个带有qty:1属性的对象

let addQty = (payload)=>{payload.qty=1;return payload}
但这并不是:

let addQty2 = (payload)=>{return payload.qty=1}
而是返回1。 为什么?

ps:我知道我可以在如下语句后返回值:

让addQty2=payload=>{payload.qty=1;返回payload;}


,但我仍然不明白为什么前一个不起作用。

JavaScript中的赋值返回赋值。比如说,

a = b = 1;
被解析为

a = (b = 1);
return (payload.qty = 1)
表达式b=1的值是1,所以我们把它赋给a。同样,第二个示例中的返回被解析为

a = (b = 1);
return (payload.qty = 1)

表达式payload.qty=1的值是1,因此返回的是1。

JavaScript中的赋值返回赋值。比如说,

a = b = 1;
被解析为

a = (b = 1);
return (payload.qty = 1)
表达式b=1的值是1,所以我们把它赋给a。同样,第二个示例中的返回被解析为

a = (b = 1);
return (payload.qty = 1)

表达式payload.qty=1的值是1,因此返回的就是这个值。

这段代码可以工作,但要知道您正在更改原始对象,然后返回它

让addQty=payload=>{payload.qty=1;返回payload;} var obj={ 名字:某物, 价格:9.95 } var newObj=addQtyobj; console.log'obj',obj;
console.log'newObj',newObj 这段代码可以工作,但要知道您正在更改原始对象,然后返回它

让addQty=payload=>{payload.qty=1;返回payload;} var obj={ 名字:某物, 价格:9.95 } var newObj=addQtyobj; console.log'obj',obj;
console.log'newObj',newObj;在第二个示例中,您返回的是有效负载,在第三个示例中,您返回的是payload.qty,您已将其设置为1。。这将返回有效负载。@TricksfortheWeb不返回准确的{qty:1}吗?我想要的基本上是这样的,但是如果可能的话,在改变对象时直接返回值为什么不执行选项2?你想做的事情很清楚,不要太冗长。@jhpratt很抱歉,我在操作中没有说得更清楚。我正在学习函数式编程,应该使用Object.assign来保持不变性。在第二个示例中,你返回的是payload,在第三个示例中,你返回的是payload.qty,你已经设置为1。。这将返回有效负载。@TricksfortheWeb不返回准确的{qty:1}吗?我想要的基本上是这样的,但是如果可能的话,在改变对象时直接返回值为什么不执行选项2?很清楚你想做什么,不要太冗长。@jhpratt很抱歉,我在操作中没有说得更清楚。我正在学习函数式编程,应该使用Object.assign来保持不变性。是的,我考虑过使用Object.assign,但认为它太冗长,或者我遗漏了一些明显的东西。事实上,我正在学习使用JS进行函数式编程,而Object.assign似乎确实是这样做的,同时考虑到了不变性。是的,我考虑过使用Object.assign,但认为它太冗长了,或者我遗漏了一些明显的东西。实际上,我正在学习使用JS进行函数式编程,而Object.assign似乎确实是一种在尊重不变性的情况下实现这一点的方法。