JavaScript中递增运算符在表达式中的应用不一致问题
JavaScript前置/后置递增运算符的执行逻辑解析
别只盯着优先级,JavaScript表达式是从左到右求值的,这才是你产生困惑的核心——优先级仅决定运算的绑定关系,但求值顺序决定了什么时候取变量的值、什么时候执行递增操作。
逐个拆解你的例子:
例1:y = x + x++(x初始为1,最终y=2)
- 从左到右求值:先读取第一个
x的当前值1; - 处理
x++:后置递增的规则是先返回变量当前值,再对变量执行递增,所以这里返回1,之后x的值变为2; - 执行加法:
1 + 1 = 2,赋值给y。
例2:y = x++ + x(x初始为1,最终y=3)
- 从左到右求值:先处理
x++,返回当前值1,之后x的值变为2; - 读取第二个
x的当前值2; - 执行加法:
1 + 2 = 3,赋值给y。
例3:y = x + x++ + x(x初始为1,最终y=4)
- 读取第一个
x的值1; - 处理
x++,返回1,x的值变为2; - 读取第三个
x的当前值2; - 执行加法:
1 + 1 + 2 = 4,赋值给y。
例4:y = x + ++x + x(x初始为1,最终y=5)
- 读取第一个
x的值1(这一步在++x执行前就完成了,不会受后续递增操作影响); - 处理
++x:前置递增的规则是先对变量执行递增,再返回新值,所以x的值先变为2,返回2; - 读取第三个
x的当前值2; - 执行加法:
1 + 2 + 2 = 5,赋值给y。
你之前的错误逻辑在于认为前置递增会提前修改所有x的值,但实际上表达式是逐步从左到右计算的,每个变量的取值时机由求值顺序决定,而非先执行所有递增操作再做加法。
内容的提问来源于stack exchange,提问作者Andrew S
相关产品推荐
相关产品推荐

