@olya_097

Почему первый вывод в консоль выводит измененные значение в объекте, а не начальные?

  • Вопрос задан
  • 183 просмотра
Решения вопроса 1
john36allTa
@john36allTa
That`s calling Walker
Если на jsFiddle нажать Run после загрузки то код выполняется корректно5dcfd9c5793e1951386315.png
Это говорит о том, что внутренний интерфейс браузера, отвечающий за вывод в консоль, срабатывает после того как объект изменяется.
Если обернуть скрипт в document.onload то он будет работать корректно. Ещё, как вариант, десериализовать объект в строку:console.log( JSON.stringify(object) )
примитивы в JS копируются в памяти, потому вывод будет правильный.
Подробнее про то, как хранятся в памяти типы в JS можно почитать тут (Спасибо Ярослав Иванов )
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@RMate
Потому что event loop)
Сначала вы ставите в очередь задание вывести в консоль
после этого происходит модификация объекта
после чего обработчик добирается до выполнения задания "вывести в консоль"
Ответ написан
@akyl-kb
Старайся писать чистые функции, что бы избежать таких неочевидных поведений
const menu = {
  width: 200,
  height: 300,
  title: "My menu"
};
console.log(menu);

function multiplyNumeric(obj) {
  const data = {}
  for (const [key, val] of Object.entries(obj)) {
    if (typeof val === 'number') {
	data[key]*=2;
    }
  }
  return {
    ...obj,
    ...data
}

const updated = multiplyNumeric(menu);

console.log(updated);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы