gpt4 book ai didi

JavaScript 函数作为 For 循环中的变量

转载 作者:行者123 更新时间:2023-11-28 20:18:18 25 4
gpt4 key购买 nike

我只是在玩一些 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 对象,它实际上只是 native Array 对象的包装器,但仅公开一些方法和属性以使其像 LIFO 堆栈一样。为了测试它,我在底部编写了代码。但是,当我尝试使用 stack.size() 返回 for 循环中堆栈的当前大小时,循环仅迭代 5 次。而如果我将该方法调用的返回值分配给一个变量并将该变量传递到 for 循环中,它将迭代正确的次数 (10)。为什么是这样?我应该不能在 for 循环中使用 stack.size() 吗?

最佳答案

因为 for 循环中的 stack.size() 在每次执行后都会进行测试,因此每次从堆栈中弹出一个元素时,大小都会变小。而如果您使用该变量,则会将堆栈大小保存在该变量中,即使从堆栈中弹出该变量也不会更改。

关于JavaScript 函数作为 For 循环中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18826485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com