我认为这是一个基本的JS问题,但是我找不到我满意的答案。我正在使用JavaScript学习运算符,但无法理解以下后缀示例及其工作方式:
var x = 4;
var y = x++;
例如,当我向x发出警报时,它给了我5。但是当我向y发出警报时,它给了我4。而且我无法理解其背后的逻辑。 我知道,因为是后缀,所以x分配给y。 y仅读取x,没有后缀。但是,如果我将其应用于其他var,为什么原来的x会改为读取后缀呢?
如果我刚做var y = x + 1
,则原始x将保持不变。但是,当我使用后缀时,情况并非如此。为什么我什至要用这种方法改变x?我不能就这样var x = 4; x++;
走吗?而不用通过另一个变量来更改它?
如果这太基础了,我深表歉意!
答案 0 :(得分:1)
为什么我还要用这种方法来改变x?
一些有趣的简短形式,例如:
const array = [1, 2, 3];
let i = 0;
while(i < array.length) console.log(array[ i++ ]);
我不能就去var x = 4; x ++; ?
是的,或者只是前缀,例如++x
或x += 1
,在大多数情况下更合适。
答案 1 :(得分:1)
将增量运算符视为返回某些内容的小函数会更容易。因此x++
是一个使x
递增并返回x
的原始值的函数,而++x
做同样的事情但返回新的值。
这有时会派上用场,尤其是在需要精确控制停止点的循环中。例如,比较:
let i = 0, j = 0;
while (++i < 5) {
console.log(i) // stops at 4
}
while (j++ < 5) {
console.log(j) // stops at 5
}
区别在于,while循环在增量之前求值,而在增量之后求值。
类似地,在递归函数中,您经常会看到类似以下内容:
function recurse(i) {
if (i == 5) return i
console.log(i)
return recurse(++i)
}
console.log("final: ", recurse(0))
但是,如果您使用后缀return recurse(i++)
,则会得到无限递归。