Помогите, пожалуйста, разобраться с передачей объекта по ссылке.
В 8-м уроке такой код:
var diceNumber = 2;
var firstCat = {
name: 'Кекс',
points: 0
};
var secondCat = {
name: 'Рудольф',
points: 0
};
var cats = [firstCat, secondCat];
var runGame = function (quantity, players) {
for (var i = 0; i < players.length; i++) {
var throwResult = keks.throwDice(quantity, quantity * 6);
players[i].points += throwResult;
console.log(players[i].name + ' выбросил ' + players[i].points);
}
return players;
};
cats = runGame(diceNumber, cats);
console.log(cats);
После объявления объектов мы объявляем переменную «cats», которой присваиваем массив из объявленных ранее объектов:
var cats = [firstCat, secondCat];
После цикла этой переменной «cats» присваиваем иное значение, а именно вызов функции:
cats = runGame(diceNumber, cats);
То есть, получается, как мне представляется, так, что сначала переменная хранила массив из объектов, а затем мы присвоили этой переменной иное значение (вызов функции). Но в значении этой переменной функция, где аргументом выступает переменная тоже самая «cats», которая хранит массив объектов.
Как это можно понять? Мы присвоили переменной иное значение, нежели при объявлении, но дальше в значении переменной — в функции, в аргументе мы передаем первоначально присвоенный массив с объектами, — вот это не укладывается в голове.
Если формализовать, то вопрос можно сформулировать так: почему в вызове функции:
cats = runGame(diceNumber, cats);
аргументом «cats» передается массив объектов? Левее же указано, что cats = runGame(diceNumber, cats).
Может быть я как-то совсем не так как нужно это понимаю? Помогите, пожалуйста, разобраться с этим.