下面是我为堆栈实现的一些方法。我无法理解为什么在.pop()函数中,你可以在返回相关值之前递减长度,但是返回正确的值。这是为什么?它与参考值和值有关吗?直觉上我会认为如果我在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;
}
答案 0 :(得分:3)
数组的最后一个元素位于索引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
。