分配时Javascript增量

Asa*_*din 6 javascript increment variable-assignment prefix-operator

我正在讨论前缀增量运算符,我们似乎遇到了分歧.

运行此代码时:

var x = 0;
x = ++x;
Run Code Online (Sandbox Code Playgroud)

是第二行相当于:

  • x =(x = x + 1)OR
  • x =(x + 1)

很难区分,因为结果是相同的(都导致x值为1)

我相信当赋值的左侧是变量本身时,该值不会保存到原始变量中.

我的对手不同意并认为只要使用++操作员,该值就会保存到原始变量中.

我们哪一个是对的?

Cer*_*rus 8

它被保存,因此它类似于第一个例子.以此代码为例:

var v = 0;
v = ++v + ++v + ++v;
// Returns 6
Run Code Online (Sandbox Code Playgroud)

那是因为这将转化为:

v = (0+1) + ((0+1)+1) + (((0+1)+1)+1);
Run Code Online (Sandbox Code Playgroud)

或者,更准确:

v = 0+1 +
v = 1+1 + //Previous value of v + 1
v = 2+1   //Previous value of v + 1
Run Code Online (Sandbox Code Playgroud)

为什么?

++v将首先保存v的递增值,然后它将返回此递增的值.
要简化操作,请在控制台中尝试:

x = 0;
++x;
Run Code Online (Sandbox Code Playgroud)

如果++x能解决x + 1,x现在的价值仍然是0,对吧?
不,你的x意志1.这意味着++x必须有一个赋值运算符.

  • @Asad:赋值_always_总是发生,而不管它写在什么地方:它本身就是一个表达式。就像几乎所有其他语言一样,JS会_first_由内而外地解析语句中的所有表达式。区别是:`++ x`解析为递增的值,而`x ++`解析为x递增之前的值,只需尝试`x = 0`,然后尝试`x ++`,最后是`x控制台:结果为0、0(旧值)和1。然后尝试使用++ x,它将立即显示2:当增量运算符出现_first_时,返回值是_new_值 (2认同)