Не понимаю каким образом модифицировался исходный объект
Всем доброго времени!
Есть вот такой простенький исходный объект в форме связного списка: const baseList = { value: 6, next: { value: 4, next: { value: 2, next: null, }, }, } Его я прогоняю через такую функцию: function backwards(list) { let prevValue; while (list) { let next = list.next; list.next = prevValue; prevValue = list; list = next; } return prevValue; } В итоге после вызова backwards(baseList)я вывожу в консоль исходный объект console.log(baseList)и с удивлением обнаруживаю что он равен { value: 6, next: null }, а не nullкак я рассчитывал. Подскажите как и на каком моменте так вышло? По ходу у меня пробелы в знаниях о ссылочных типах данных... |
null не передаётся по ссылке, аргументы и возврат функции тоже не ссылка(все аргументы - копия, для объектов - копия ссылки).
В baseList остаётся лежать то, что лежало, внутри функции ты можешь изменить содержимое объекта, но никак не сам объект. |
Хорошо, про null понятно. Про значение объекта тоже понятно, но все еще непонятно, почему именно такое значение? Я проверил все итерации цикла, такое значение только в первых итерациях, но не в последних
|
Почему именно
{ value: 6, next: null } |
Потому, что вы выводите именно baseList, у которого свойство value: 6;
Со свойством next вы делаете разные манипуляции, пока оно не станет null, а свойство value так и остается 6. |
Я понял, весь фокус был в строке
list = nextкоторая таким образом перезаписывает свойство next, всем спасибо! |
Часовой пояс GMT +3, время: 16:45. |