counter++与counter=counter+1的区别是什么?

3
var counter = 0;
var increment = function(){
    return counter++;
    // return counter=counter+1;
}

console.log(increment());

为什么 counter ++; 返回 0,但 counter = counter +1; 返回 1?
3个回答

3
后缀递增运算符返回当前值以供评估,然后将其递增,因此当第二次引用它时,值的变化是明显的。所以当执行return语句时,该值尚未被递增。您可以通过以下方式进行交叉检查:
console.log(counter++); // 0
console.log(counter); // 1
return counter; // obviously 1

尝试使用前缀操作符,它会先增加值,然后返回递增后的值以供评估。

return ++counter; // 1 

1
这被称为 前缀 (++x) vs 后缀 (x++),唯一的区别实际上是操作顺序:
counter;

评估为一个值。 (0)

counter++;

这个表达式的结果是一个值(0),进行了计算(0 -> 1),并修改了一个变量(counter -> 1)。

++counter;

执行一个计算(0 + 1),修改一个变量(counter -> 1),并评估为一个值(1)。

1

var counter = 0;

var increment = function(){
// now counter is 0 and after return it increment it's value to 1
// return 0 then 0+1=1;
    return counter++;
// calculate like math, counter = 0+1 then counter = 1, now return 1;
    // return counter=counter+1;
}

console.log(increment());

在第一个场景中,
return counter++;

这个语句是后缀表达式,按照如下方式进行求值:

return 0; and then 0+1=1

在第二种情况下,
return counter=counter+1;

像数学一样计算,

return counter = 0+1 then,
return counter = 1, 
return 1;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接