如何在循环中创建新变量的同时修改函数参数

How to modify a function parameter at the same time new vars are created on a loop?

本文关键字:修改 参数 函数 变量 循环 创建 新变量      更新时间:2023-09-26

这是未尝试将var nn = 99添加到循环的代码

//note that the 'i' is a parameter of the function
function myFunction(arr, i) {
  for (i = i ? i + 5 : 1; i < arr.length; i++) {
    //...
  }
}

当我尝试添加一个新的var时,它会做一些我不想要的事情:

编辑:这似乎是错误的

for (var nn = 99, i = i ? i + 5 : 1; i < arr.length; i++) //created a new 'i'

for (i = i ? i + 5 : 1, var nn = 99; i < arr.length; i++)
//doesn't work :(

我知道如果我把它移到外面,它是完全一样的。但我最讨厌的一件事是,几个月后阅读旧代码时,无法理解我的意思。在循环中移动这条线会让我更容易理解这条线。

您不能修改函数的参数。由于i是一个基元值(数字),JavaScript将通过值而不是引用进行调用。

当你将第二个参数命名为"i"时,它将从一开始就作为一个局部变量可用。在某个地方使用var关键字和"i"不会改变任何事情。

((i=i?i+5:1)*0)+99

这将永远等于99。但这并不重要,因为目前还不清楚你想要实现什么。

如果你的目标是从指定的起点循环通过一个数组,那么你可以这样做。

for (; i<arr.length; i++) {}

如果你不能保证我是一个数字,那么你就必须进行某种检查。

for (var index=(i?i:0); index < arr.length; index++) {}

Javascript将按值传递基元,因此您不能从该函数内部修改源值。如果需要,可以返回修改后的值。

ivar = func(arr, ivar);
function func(arr, i){
    for (;i<arr.length; i++) {}
    return i;
}