给予:
function a() {
return 1;
}
a()++;我遇到了一个错误,难道这在JS中是不可能的吗?

我想要的是得到值2。
发布于 2014-03-04 23:43:59
不是的。问题是++ (像+=一样)只适用于参考规格类型的表达式。
也就是说,只有与“变量或属性表达式”一起使用时,++才有效。
引用类型用于解释诸如delete、typeof等操作符的行为,以及赋值操作符(包括
++、+=等)的行为。例如,赋值的左操作数预计会产生引用规范类型表达式。
var x
x++ // variable
// same as x = x + 1, when used as statement
((x))++ // totally legal, still an RST-expression
var o = {p: 0}
o.p++ // property
// same as o.p = o.p + 1, when used as statement
// while odd, still legal as the ++ applies to an RST-expression
var q
((q = {p: 0}).p)++ // q.p == 1, after但是,函数调用表达式永远不会产生RST-值,因此会失败.它不是一个SyntaxError,并且允许生产,但是类型是错误的,这会导致运行时ReferenceError异常。
// (modified to show it is a run-time exception not related to parsing)
function f () {
f()++ // whoops!
// same failure as f() = f() + 1
}
f();函数只是返回值(这是计算表达式的结果),但是在JavaScript中没有可分配的表达式,它产生一个RST-值-前面提到的运算符“消耗”RST-表达式并计算为一个非RST值。
原始问题可能在C++中的一个变体,它支持创建显式引用。然而,在ECMAScript中,RST主要用于描述“l值行为”,但不公开。
#include <iostream>
using namespace std;
int x;
int& func() {
return x;
}
int main() {
func()++;
cout << x << endl;
func()++;
cout << x << endl;
return 0;
}https://stackoverflow.com/questions/22185092
复制相似问题