在返回之前递增堆栈长度 - 为什么它会起作用?

时间:2015-08-24 04:36:29

标签: javascript data-structures

下面是我为堆栈实现的一些方法。我无法理解为什么在.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;
}

1 个答案:

答案 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