Передать переменные по ссылке в Javascript - PullRequest
256 голосов
/ 12 октября 2011

Как передать переменные по ссылке в JS?У меня есть 3 переменные, с которыми я хочу выполнить несколько операций, поэтому я хочу поместить их в цикл for и выполнить операции с каждой из них.

псевдокод:

myArray = new Array(var1, var2, var3);
for (var x = 0; x < myArray.length; x++){
    //do stuff to the array
    makePretty(myArray[x]);
}
//now do stuff to the updated vars

Что такоелучший способ сделать это?

Ответы [ 13 ]

0 голосов
/ 12 февраля 2019

JS не является сильным типом, он позволяет решать проблемы различными способами, как показано в этом шаге.

Однако, с точки зрения ремонтопригодности, я бы согласился с Бартом Хофландом. Функция должна получить аргументы, чтобы что-то сделать и вернуть результат. Делая их легко многоразовыми.

Если вы чувствуете, что переменные должны передаваться по ссылке, вам, возможно, будет лучше обслужить их встраивание в объекты IMHO.

0 голосов
/ 28 октября 2018

Javascript может изменять элементы массива внутри функции (она передается как ссылка на объект / массив).

function makeAllPretty(items) {
   for (var x = 0; x < myArray.length; x++){
      //do stuff to the array
      items[x] = makePretty(items[x]);
   }
}

myArray = new Array(var1, var2, var3);
makeAllPretty(myArray);

Вот еще один пример:

function inc(items) {
  for (let i=0; i < items.length; i++) {
    items[i]++;
  }
}

let values = [1,2,3];
inc(values);
console.log(values);
// prints [2,3,4]
0 голосов
/ 23 мая 2018

Я точно знаю, что вы имеете в виду.То же самое в Swift не будет проблемой.Суть в том, что let не var.

Тот факт, что примитивы передаются по значению, но тот факт, что значение var i в точке итерации не копируется в анонимную функцию, весьмаудивительно, если не сказать больше.

for (let i = 0; i < boxArray.length; i++) {
  boxArray[i].onclick = function() { console.log(i) }; // correctly prints the index
}
...