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

时间:2012-02-22 19:31:54

标签: javascript function loops parameters

这是没有尝试将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 :(

我知道如果我把它移到外面就完全一样了。但是我最讨厌的事情之一就是在几个月后阅读旧代码时无法理解我的意思。在循环中移动该行将使我更容易理解该行。

2 个答案:

答案 0 :(得分:1)

您无法修改函数的参数。由于i是原始值(数字),因此JavaScript将按值调用,而不是按引用。

当你将第二个参数命名为“i”时,它将从一开始就作为局部变量提供。在某处使用带有“i”的var关键字不会改变任何内容。

答案 1 :(得分:0)

  

((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;
}