Как происходит наполнение списка в данном примере? (JavaScript)

Всем привет, в следующем примере происходит создание списка из массива данных, в котором каждый элемент вложен в предыдущий . Объясните пожалуйста, как здесь происходит заполнение объекта list0, ведь в цикле его нигде нет. Это можно объяснить тем, что list0 является ссылкой на list, но зачем тогда он нужен, и почему ссылка затирается в последующей работе кода? Спасибо за ответ :)

function arrayToList(arr) {

  let list = {
    value: arr[0],
    rest: null
  }

  let list0 = list;
  console.log(list === list0)
  //  true
  for (i = 1; i < arr.length; i++) {
    list.rest = {};
    list.rest.value = arr[i];
    list.rest.rest = null;
    list = list.rest;

  }

  console.log(list === list0)
  //false
  console.log(list)
  console.log(list0)

}
arrayToList([1, 2, 3, 4, 5])


Ответы (1 шт):

Автор решения: vsemozhebuty

В list0 мы просто сохраняем ссылку на корень списка, чтобы можно было потом вывести его в консоль целиком. Этот корень присутствует в первой итерации цикла под именем list, но в каждой следующей итерации эта переменная уже ссылается на дочерний элемент следующей степени вложенности. Мы бы потеряли ссылку на корень, если бы не сохранили её в list0, ведь в конце итераций list ссылается уже на самый глубокий элемент.

→ Ссылка