Вопрос по поводу глобальных переменных

105
21 октября 2021, 15:00

Я отдаю себе отчет о том, что это супер нубский вопрос, но тем не менее, я просидел час в попытках понять, почему глоабальный вар изменяется. Я делаю глобальный вар аргументом функции, на основе этого аргумента делаю новый лет, после этого изменяю только его. Почему глобальный вар тоже изменяется? Еще раз простите, но я даже не знаю, как загуглить вопрос правильно.

var bookList = ["The Hound of the Baskervilles", "On The Electrodynamics of Moving Bodies", "Philosophiæ Naturalis Principia Mathematica", "Disquisitiones Arithmeticae"]; 
 
function add(booklist, bookName) { 
  let meh = booklist; 
  meh.push(bookName); 
  return meh; 
 
} 
 
var newBookList = add(bookList, 'A Brief History of Time'); 
 
console.log(bookList);

консоль показывает измененный буклист.

Answer 1

Просто скопипащу

Обычные значения: строки, числа, булевы значения, null/undefined при присваивании переменных копируются целиком или, как говорят, «по значению».

С объектами – всё не так.

В переменной, которой присвоен объект, хранится не сам объект, а «адрес его места в памяти», иными словами – «ссылка» на него.

Таким образом у тебя в переменной meh находится не скопированный массив, а ссылка на него и ты в него добавляешь элемент.

READ ALSO
Вставить картинку в base64 из localStorage на html страницу

Вставить картинку в base64 из localStorage на html страницу

Имею скрипт, который добавляет картинки в localStorage в таком виде

189
Ошибка в сравнении

Ошибка в сравнении

Условие: Пользователь вводит номер месяцаВывести название времени года (весна, лето, осень, зима)

203
Вывод пунктов меню и текста для них из JSON

Вывод пунктов меню и текста для них из JSON

Имеется некоторый ветвистый JSON файлИз него осуществляется вывод пунктов меню

83