javascript - 返回之前增加堆栈长度 - 为什么它有效?

标签 javascript data-structures

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

相关文章:

JavaScript 使类的方法静态并可供其实例使用

python - 存储程序序列的数据结构 - Python

java - EntrySet()对于Java中实现Map.Entry的自定义类的适用性

算法 - 通过盒子分发元素

algorithm - 如果一个节点等于二叉搜索树中的父节点,我们将它放在哪一边

javascript - 捕获每 3 行,但如果它有 child 和分配的类(class)?

javascript - 如果所有 JavaScript 类型都是对象,那么为什么数字要按值传递?

javascript - SQL/PHP 静默刷新

c++ - 关于我的模板化链表

javascript - Angular 如何使用 ng-repeat 和 ionic