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

标签 javascript arrays node.js

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

我正在编写一个 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/

相关文章:

node.js - 未设置 Cookie,即使它在响应 header 中。使用快速 session cookie

javascript - Fancybox 2 和 Swipe Slider 不能一起使用

javascript - 从 x、y、宽度、高度和旋转中获取旋转的矩形点

javascript - React 18 不再支持 Warning::ReactDOM.render。请改用 createRoot

c - 如何在 C 语言中向数组添加元素?

node.js - 如何在 Plotly 中显示所有 x 轴刻度值?

javascript - Javascript 中的通用树实现

python - 从文件中将数字解析为两个二维数组

c - 为结构中的数组分配内存(在 C 中)

javascript - 通过电报机器人创建并发送 SVG