下面是我为堆栈实现的一些方法。我无法理解为什么在 .pop() 函数中,您可以在返回相关值之前递减长度,但仍返回正确的值。这是为什么?这与引用与值(value)有关吗?直觉上我会认为,如果我在 pop 中的 return 语句之前递减,它将返回我想要的值之前的值,而不是正确的值。
stackMethods.pop = function(){
if(this.length > 0){
this.length--; //why does decrementing here still return
//the correct value here:
return this.storage[this.length];
}
}
stackMethods.push = function(val){
this.storage[this.length] = val;
this.length++;
}
stackMethods.size = function(){
return this.length;
}
最佳答案
数组的最后一个元素位于索引 length - 1
处,因为数组索引从 0 开始。
想象一下这样一种情况,你的对象只有一个元素,然后你调用 pop。该元素将位于 this.storage[0]
,但 this.length === 1
。您可以访问 this.storage[ this.length - 1 ]
,然后递减 this.length
,或者像您显示的代码一样先递减它。
如果数组自己的 length
属性递减,则会从数组中删除最后一个元素,但 length
属性不是数组的属性,因为实际的数组位于 this.storage
中,并且要递减的属性是 this.length
而不是 this.storage.length
。
关于javascript - 返回之前增加堆栈长度 - 为什么它有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32174506/