2014-04-14 49 views
1

我有下面的小测试页:应用++运算符返回的函数值会导致错误

var getNum = function(){ 
    return 5; 
}; 
var y = getNum()++; // This causes an error. 
document.write("y = " + y); 

这将导致这个错误在Firefox 27.01:如果我更改线路

ReferenceError: invalid assignment left-hand side 
var y = getNum()++; 

var y = getNum()++; 

var y = getNum() + 1; 

然后我得到没有错误。会有人碰巧知道为什么getNum()++不被允许?谢谢。

+0

谢谢。我认为我不知不觉地试图做一些事情,如5 = 6 –

回答

1

因为你基本上是写y = 5++

+0

谢谢。我认为5 ++实际上意味着5 = 5 + 1,而不是用6替换5。 –

0

运营商++等于+= 1

所以:

var y = getNum()++; 

一样:

var y = 5 += 1; 
2

tldr:这没有任何意义。

++操作者(如+=适用于Reference Specification Type的表达式。也就是说,++只有与“变量或属性表达式”一起使用时才有效。

引用类型用于解释诸如delete,typeof和赋值运算符[包括++,+ =等]的运算符的行为。例如,赋值的左侧操作数预计会产生一个参考[​​规范类型表达式]。

这就是JavaScript如何将赋值的值返回到适当的变量/属性。当不能进行这样的分配时,例如试图将++应用于函数调用或文字表达式的结果时,会引发运行时ReferenceError。

(以上总结来自a previous answer of mine。)

+1

+1另一种查看方法是[ECMA-262](http://ecma-international.org/ecma -262/5.1 /#sec-11.3)表示:它只能应用于有效的* LeftHandSideExpression *。 ++运算符评估表达式,将其加1,然后**将该值分配回表达式**。所以它只能在赋值表达式的左边有效的东西上运行,其中任何种类的文字都是无效的。 – RobG

相关问题