Не понимаю каким образом модифицировался исходный объект
Всем доброго времени!
Есть вот такой простенький исходный объект в форме связного списка:
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, время: 17:51. |