Почему порядок вывода ключа объекта именно такой? Изучаю JavaScript и в книге есть такой пример.function f(o) {
o.message = "Изменено в f";
o = {
message: "Новый объект!"
};
console.log (`Внутри f: o.message="${o.message}" (после присваивания)`);
}
let o = {
message: 'Начальное значение'
};
console.log(`Перед вызовом f: o.message="${o.message}"`);
f(o);
console.log(`После вызова f: o.message="${o.message}"`);Результат выполнения следующий:
Перед вызовом f: o.message="Начальное значение"
Внутри f: o.message="Новый объект!" (после присваивания)
После вызова f: o.message="Изменено в f"Вопрос
Почему в строку выводится "Новый объект!", вместо "Изменено в f", когда в теле функции первым идет o.message = "Изменено в f";
Дело в приоритете оператов или здесь какое-то другое правило?
Сильно не ругайте, если вопрос глупый, я новичок, пытался гуглить, но выходили совершенно иные темы.spoilerВ самом учебнике этому не уделено внимание.

21 Авг 2019 в 07:00
241 +1
0
Ответы
1

Причина, по которой в строке выводится "Новый объект!" вместо "Изменено в f", связана с тем, как работает передача объектов в JavaScript.

В JavaScript объекты передаются по ссылке, то есть переменная o в функции f указывает на тот же объект в памяти, что и переменная o вне функции. Когда внутри функции вы делаете o.message = "Изменено в f";, вы обращаетесь к тому же объекту, который был передан в функцию. После этого вы создаете новый объект с новым свойством message и присваиваете переменной o этот новый объект, но это не влияет на изначальный объект за пределами функции. Поэтому после вызова функции o.message по-прежнему будет равно "Изменено в f", так как первоначальный объект не изменился.

Надеюсь, это поможет вам лучше понять поведение кода в данном случае. Если у вас есть дополнительные вопросы, не стесняйтесь задавать.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир