gpt4 book ai didi

javascript - 普通计数器与通过函数的数组计数器

转载 作者:太空宇宙 更新时间:2023-11-04 01:47:09 25 4
gpt4 key购买 nike

各位优秀的开发人员大家好,

我正在编写一个 Node 应用程序,遇到了一个计数器问题,但这可能是一个纯JS问题。

我编写了这个测试代码(而不是我的复杂问题),以便更清楚地呈现问题。

 var func2 = function(i,counter,arrcounter)
{

counter++;
console.log('counter is ' + counter);

arrcounter.push(i);

console.log('arrcounter ' + arrcounter);


}



var looptest = function(){

var counter = 0;
var arrcounter = [];


for (var i = 0 ; i<10 ; i++)


func2(i,counter,arrcounter);

}();

如您所见,我在 for 循环之前声明了 var counter = 0,以及一个名为 arrcounter 的数组,并将其传递给 func2func2 在每次迭代时都会被调用。

我得到了这个输出:

counter is 1
arrcounter 0
counter is 1
arrcounter 0,1
counter is 1
arrcounter 0,1,2
counter is 1
arrcounter 0,1,2,3
counter is 1
arrcounter 0,1,2,3,4
counter is 1
arrcounter 0,1,2,3,4,5
counter is 1
arrcounter 0,1,2,3,4,5,6
counter is 1
arrcounter 0,1,2,3,4,5,6,7
counter is 1
arrcounter 0,1,2,3,4,5,6,7,8
counter is 1
arrcounter 0,1,2,3,4,5,6,7,8,9

正如您在上面所看到的,arrcounter 已“增量”纠正(我知道这并不完全是 array.push 的正确术语),但整数 counter 似乎在每次 func2 调用时都作为 0 传递。

我的问题是,counterarrcounter都是在for循环之前声明的,那么为什么arrcounter能够正确“跟踪”,而counter却不能?在这种情况下,计数器的正确做法是什么?

最佳答案

在 Javascript 中,基本类型是按值传递的。在您的情况下,计数器也是按值传递的,对其所做的更改不会反射(reflect)回来。您将 i 插入 arrCounter 数组 中,该数组正在不断增加,这就是 arrCounter 数组显示正确数据的原因。您的 counter 变量不是 global 变量,而是按值传递给 func2() ,因此在 func2() 中对其所做的更改不会反射(reflect)回来,这就是为什么它始终仅作为 0 传递的原因。

如果您要增加计数器变量并将其值发送到 Func2(),它将开始显示正确的结果,请尝试以下操作:

var func2 = function(i,counter,arrcounter)
{


console.log('counter is ' + counter);

arrcounter.push(i);

console.log('arrcounter ' + arrcounter);


}



var looptest = function(){

var arrcounter = [];
var counter = 0;

for (var i = 0 ; i<10 ; i++)


func2(i,counter++,arrcounter);

}();

关于javascript - 普通计数器与通过函数的数组计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51012893/

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