【发布时间】:2019-04-17 06:44:33
【问题描述】:
你认为这个表达式会产生什么结果?
var a = 10;
a = a + (a = 5);
console.log(a);
// a = 10?
不! 15岁!
现在让我们看看另一个类似的说法:
var a = 10;
a = (a = 5) + a;
console.log(a);
// a = 15?
再次不,现在是 10。这是为什么呢?我无法理解。但是等等,还有两个:
var a = 10;
a = a + a++;
console.log(a);
// a = 21? Haha no! Its 20!
最后一个:
var a = 10;
a = a++ + a;
console.log(a);
// 21))) now my mind is blown away (
那么谁能告诉我,为什么 javascript 会这样?
【问题讨论】:
-
我只是想知道为什么他们是正确的,我不是说他们不是
-
前两个例子怎么样?
-
虽然您的所有问题都基于同一个 basic 问题(当我多次为同一个变量赋值时,操作的执行顺序是什么?在同一个表达式中?——这首先是一个糟糕的想法),我投票结束这个过于宽泛,因为它们是单独的问题(而且每个问题可能都有单独的重复项) .
-
“括号中的表达式必须先求值?” 这不是括号的意思。我想有人可以说它们会影响评估的顺序(但这并不一定意味着它们首先被评估,想象一下你有多组括号,它们不能一起成为“第一”)。相反,它们会更改操作数/运算符和运算符的优先级,这会影响评估顺序。例如。
3 * 4 + 5与3 * (4 + 5)不同。x * y的 LHS,即3仍然首先被评估。区别在于评估 RHS,4与4 + 5。
标签: javascript operators operator-precedence