这是 2.0 的原因是因为几个月前我发布了与bools相关的类似question。试图理解b1 = !b2 = true;
错误的原因。我了解了功能等效和从右到左评估顺序。
今天早上,我正在摆弄一些东西,我很困惑为什么以下代码会抛出类似的错误。
function test (){
return 1;
}
console.log((test())++);

我查找operator precedence获取javascript,但它说...(数字优先)
20 分组
18 函数调用
17 后缀增量
17 Postfix Decrement
那为什么会抛出错误?
答案 0 :(得分:2)
++
运算符将一个值添加到变量的值中,并将结果赋给变量。换句话说,foo++
约等于foo = foo + 1
。现在考虑你的代码:
(test())++
test()
评估为1
,所以你基本上有这个:
(1)++
或者:
(1) = 1 + 1
左侧(1)
没有任何意义。您无法为数字指定值,因此错误。
*实际上,表达式foo = foo + 1
在添加之后计算为foo
的值,而foo++
计算为foo
的值之前添加。然后,foo++
实际上等同于(oldFoo = foo, foo = foo + 1, oldFoo)
。