Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.10.2023, 18:29
Аспирант
Отправить личное сообщение для Himmelin Посмотреть профиль Найти все сообщения от Himmelin
 
Регистрация: 14.01.2019
Сообщений: 31

Не понимаю каким образом модифицировался исходный объект
Всем доброго времени!

Есть вот такой простенький исходный объект в форме связного списка:

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
как я рассчитывал. Подскажите как и на каком моменте так вышло? По ходу у меня пробелы в знаниях о ссылочных типах данных...
Ответить с цитированием
  #2 (permalink)  
Старый 23.10.2023, 19:47
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,588

null не передаётся по ссылке, аргументы и возврат функции тоже не ссылка(все аргументы - копия, для объектов - копия ссылки).
В baseList остаётся лежать то, что лежало, внутри функции ты можешь изменить содержимое объекта, но никак не сам объект.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 23.10.2023, 19:55
Аспирант
Отправить личное сообщение для Himmelin Посмотреть профиль Найти все сообщения от Himmelin
 
Регистрация: 14.01.2019
Сообщений: 31

Хорошо, про null понятно. Про значение объекта тоже понятно, но все еще непонятно, почему именно такое значение? Я проверил все итерации цикла, такое значение только в первых итерациях, но не в последних
Ответить с цитированием
  #4 (permalink)  
Старый 23.10.2023, 20:28
Аспирант
Отправить личное сообщение для Himmelin Посмотреть профиль Найти все сообщения от Himmelin
 
Регистрация: 14.01.2019
Сообщений: 31

Почему именно
{ value: 6, next: null }
Ответить с цитированием
  #5 (permalink)  
Старый 23.10.2023, 23:33
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Потому, что вы выводите именно baseList, у которого свойство value: 6;
Со свойством next вы делаете разные манипуляции, пока оно не станет null, а свойство value так и остается 6.
Ответить с цитированием
  #6 (permalink)  
Старый 24.10.2023, 12:28
Аспирант
Отправить личное сообщение для Himmelin Посмотреть профиль Найти все сообщения от Himmelin
 
Регистрация: 14.01.2019
Сообщений: 31

Я понял, весь фокус был в строке
list = next
которая таким образом перезаписывает свойство next, всем спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Каким образом уменьшить размер поля ввода даты и времени bootstrap-datetime? drno-reg Элементы интерфейса 0 12.09.2016 16:11
Каким образом можно скопировать значения массива? Kondrv Общие вопросы Javascript 1 22.03.2016 15:58
Каким образом происходим дествие при нажатии vitorrio Общие вопросы Javascript 2 22.11.2012 08:27
каким образом вывести текст с помощью SetTimeOut В DIV? bratkovsky Общие вопросы Javascript 2 04.08.2012 00:15
Каким образом можно отыскать в интернете сестру? SnezhUnA Оффтопик 2 10.08.2009 11:27