Как изменить параметр функции при создании новых переменных в цикле? - PullRequest
0 голосов
/ 22 февраля 2012

Это код без каких-либо попыток добавить 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 ]

1 голос
/ 22 февраля 2012

Вы не можете изменить параметр функции. Поскольку i является примитивным значением (числом), JavaScript будет вызываться по значению, а не по ссылке.

И когда вы назовете свой второй аргумент "i", он будет доступен как локальная переменная с самого начала. Использование ключевого слова var где-то с «i» ничего не изменит.

0 голосов
/ 23 февраля 2012

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