Javascript 关于Array.reduce()的奇怪函数

Javascript 关于Array.reduce()的奇怪函数,javascript,arrays,reduce,Javascript,Arrays,Reduce,我有以下和平的准则: const reducedValue = array.reduce((acc, curr) => { if (decision(curr)){ return acc++; } return acc; }, 0); 当console.log(samApples)始终为0时,即使决策多次为真。但是,当我更改为acc+=1时,效果很好 为什么会发生这种情况?如果在变量(Y++-postfix)之后使用++运算符,则返回值,然后递增。

我有以下和平的准则:

const reducedValue = array.reduce((acc, curr) => {
    if (decision(curr)){
        return acc++;
    }
    return acc;
}, 0);
console.log(samApples)
始终为
0
时,即使
决策
多次为
。但是,当我更改为
acc+=1
时,效果很好


为什么会发生这种情况?

如果在变量(
Y++
-postfix)之后使用
++
运算符,则返回值,然后递增。如果在值(
++Y
-前缀)之前使用,它将递增,然后返回:

设x=1,y=1;
console.log(x++);//返回x,然后递增

console.log(++y);//递增y然后返回它
如果在变量(
y++
-postfix)返回值之后使用
++
运算符,则将其递增。如果在值(
++Y
-前缀)之前使用,它将递增,然后返回:

设x=1,y=1;
console.log(x++);//返回x,然后递增

console.log(++y);//递增y,然后返回它
,这是因为
++
运算符的工作方式。当您执行
x++
x
操作时,在当前操作之后,它将递增,在您的情况下,它是
return
,并且由于原语类型作为值传递,而不是作为函数参数的引用,因此增量将在
return
之后处理,而不会转入下一次迭代

相反,
+=
是在任何其他操作之前立即执行的。因此,这是可行的。但是,如果您更喜欢使用
++
语法,请如下使用:
++x
,因为此操作是在
返回之前执行的(其工作方式与
+=1


还可以查看关于MDN的以下(可以说更好)描述:


还有一点概念证明:

const val=[1,2,3,4,5,6]。reduce((acc,curr)=>{
返回+acc;
}, 0);

log(val)
这是因为
++
操作符的工作方式。当您执行
x++
x
操作时,在当前操作之后,它将递增,在您的情况下,它是
return
,并且由于原语类型作为值传递,而不是作为函数参数的引用,因此增量将在
return
之后处理,而不会转入下一次迭代

相反,
+=
是在任何其他操作之前立即执行的。因此,这是可行的。但是,如果您更喜欢使用
++
语法,请如下使用:
++x
,因为此操作是在
返回之前执行的(其工作方式与
+=1


还可以查看关于MDN的以下(可以说更好)描述:


还有一点概念证明:

const val=[1,2,3,4,5,6]。reduce((acc,curr)=>{
返回+acc;
}, 0);
console.log(val)
acc+decision(curr)
足够了。我习惯于打字脚本(显式转换)。
acc+decision(curr)
sulfies.yesp。我习惯于打字脚本(显式转换)。