为什么这是一个无效的任务左手边? - 2.0

时间:2017-02-28 22:05:37

标签: javascript

这是 2.0 的原因是因为几个月前我发布了与bools相关的类似question。试图理解b1 = !b2 = true;错误的原因。我了解了功能等效从右到左评估顺序。

今天早上,我正在摆弄一些东西,我很困惑为什么以下代码会抛出类似的错误。



function test (){
  return 1;
}

console.log((test())++);




我查找operator precedence获取javascript,但它说...(数字优先)

  

20 分组   
18 函数调用   
17 后缀增量   
17 Postfix Decrement

那为什么会抛出错误?

1 个答案:

答案 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)