我只是在玩一些 JavaScript 并有以下代码:
function Stack() {
// Wrapper class for Array. This class only exposes the push
// and pop methods from the Array and the length property
// to mimic the a LIFO Stack.
// Instantiate new Array object.
this.stack = new Array();
// Pushes a new value on to the stack.
// @param arg to be pushed.
this.push = function(arg) {
return this.stack.push(arg);
}
// Pops a value from the stack and returns it.
this.pop = function() {
return this.stack.pop();
}
// Get size of the Stack.
this.size = function() {
return this.stack.length;
}
}
var stack = new Stack();
// Push 10 items on to the stack
for (var i = 0; i < 10; i++) {
stack.push(i);
}
for (var i = 0; i < stack.size(); i++) {
console.log(stack.pop());
}
第一部分定义了一个 Stack 对象,它实际上只是原生 Array 对象的包装器,但只公开了一些方法和属性以使其类似于 LIFO 堆栈。为了测试它,我在底部编写了代码。但是,当我尝试stack.size()
在 for 循环中使用返回堆栈的当前大小时,循环仅迭代 5 次。然而,如果我将该方法调用的返回值分配给一个变量并将该变量传递给 for 循环,它会迭代正确的次数(10)。为什么是这样?我应该不能在 for 循环中使用 stack.size() 吗?