Во-первых, мы можем написать программу по-другому это будет более понятно
function listToArray(list) {
array = [];
for (var i=list;i; i = i.rest)
{
array.push(i.value);
alert(array)
}
}
var listobject = { value: 10, rest: { value: 20, rest: { value: 30, rest: null } } };
listToArray(listobject);
Здесь ListObject является object literal и используя цикл for, мы проходим через значения объектного литерала или свойства объектного литерала.
Мы можем взять каждую строку кода
1) listToArray(listobject);
это вызов функции, здесь мы передаем объект в качестве аргумента функции.
2) При выполнении этого кода, то управление переходит к определению функции
function listToArray(list) { ...}
Здесь список тот же аргумент, что мы передаем в момент вызова функции.
3) array = [];
Внутри функции мы объявляем массив, изначально массив не имеет элементов.
4) следующий это наш цикл. for (var i=list;list; i = i.rest)
внутренний цикл сначала мы назначаем var i = list;
означает, что мы приписывать все свойства списка объектов для я
Это означает, что мы можем получить доступ к каждому свойству объекта через i
,
пример:
i.value приведет 10
5) следующее условие Условие здесь i
и в вашей программе это узел
все имеют тот же смысл в данном случае:
условие будет ложным, когда i
имеет нулевое значение, в вашем случае node
равна нулю.
6) i=i.rest
это даст свойство объекта или значения объекта.
Пример: listobject.value will result 10
listobject.rest.value will result 20
listobject.rest.rest.value will result 30
7) и, наконец, array.push(i.value);
добавить значения в массиве, и в этом наш массив содержит 10,20,30
Он остановится, когда узел равен null, так как это вернет значение false что приводит к завершению цикла. – DoctorMick