示例1:
var a = 0;
var b = 1;
a = (b++);
console.log(a);
a
等于1
,它是相同的,有或没有括号。例2:
var a = 0;
var b = 1;
a = b++;
console.log(a);
我理解第二个例子。 b
被分配到a
,然后递增到2
。但是在第一个示例中,为什么不将括号强制b
增加到2
,然后将值赋给a
给定括号具有最高的运算符优先级?感谢。
答案 0 :(得分:2)
我理解第二个例子。
b
被分配到a
,然后递增到2
。
不完全。遗漏了一些细节,它是:
b
(1
)的值并将其放在一边。b
增加到2
。b++
表达式的结果为步骤1中留出的值(值1
)。a
。 ...这就是()
没有任何区别的原因。 :-) b++
表达式的结果只是作为分组运算符(()
)的结果传播。
the spec中的详细信息。
答案 1 :(得分:0)
T.J.的解释在理论水平上是一个很好的,但这是另一个角度(比理论更实际)的解释:
我们有两个相似的表达式b++
和++b
。两者都意味着b = b + 1
,但它们的工作方式不同。
b++
计算b
的当前值(即1),然后递增它。它相当于:
var a = 0;
var b = 1;
a = b;
b = b + 1; //(b + 1) makes no difference
console.log(a);

++b
执行相反的操作,增加b
,然后计算增量值。它相当于:
var a = 0;
var b = 1;
b = b + 1; //(b + 1) makes no difference
a = b;
console.log(a);

现在,请注意,在上述任何示例中添加括号b + 1
都不会产生任何影响,因为分配a = b
是在不同的步骤中完成的。同样地,将括号添加到b++
也不会有任何区别,因为a
的分配和指控是在两个不同的步骤中完成的。
但是,b++
周围的括号实际上等同于上面代码中b
行a = b
周围的括号,而不是b + 1
周围的括号。你的问题。很明显,括号a = (b)
没有任何区别。
编辑正如您在评论中所建议的那样,如果我们将b++
视为隐式函数,那么该函数的主体类似于TJ的解释:< / p>
b
(1)的值,让我们说一个隐式变量x
b
增加到2 x
在函数调用周围加上括号就像将它们放在返回值1附近。这是一个演示:
var a = 0;
var b = 1;
a = bPlusPlus(); //(bPlusPlus()) makes no difference
console.log(a);
function bPlusPlus() {
var x = b;
b = b + 1;
return x;
}
&#13;