Изначально переменной
list присваивается значение
null. Дале, каждую итерацию выполняется код:
list = { value: array[i], rest: list };
Сначала выполняется правая часть выражения, создается объект со свойством
value принимающим значение элемента массива по индексу
i, и свойством
rest принимающим значение
list, первую итерацию оно
null:
{ value: 10: rest: null };
Ну, а затем созданный объект присваивается переменной
list. И так каждую итерацию.
Простой пример как это работает:
var x = 10;
x = x + 5;
Сначала вычисляется правая часть, затем происходит присваивание:
x = 10 + 5;
или:
x = 15;
А так можно сделать ссылку на себя:
var obj = { // создаем объект доступный по ссылке obj
prop: 'example prop'
};
obj.self = obj; // добавляем в объект свойство self ссылающееся на сам объект