@Vadich
Html coder, front-end

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

var cat = {name: 'Athena'};

function swap(feline){
feline.name = 'Wild';
feline = {name: 'Tabby'};
}

swap(cat);
console.log(cat.name) // ответ 'Wild'

Кто может объяснить почему Wild a не Tabby при консоле
  • Вопрос задан
  • 43 просмотра
Решения вопроса 1
IlyaMalone
@IlyaMalone
Frontend Developer
Объекты - ссылочый тип данных, когда какой-либо переменной мы присваиваем значение объекта, то мы присваиваем ссылку на этот объект, который хранится в памяти.

1. Вы в функцию swap передаете аргументом объект cat
2. feline.name = 'Wild';
Здесь мы меняем свойство name объекта cat на 'Wild'
Теперь у нас в памяти хранится объект:
cat: {
   name: 'Wild'
}

3. Далее вы меняете аргумент на другой объект, т.е.вы аргументу функции передаете ссылку на новый, другой объект:
feline = {name: 'Tabby'};
По итогу у нас есть 2 объекта в памяти:
cat: {
   name: 'Wild'
}
{
   name: 'Tabby'
}


Если вы замените это feline = {name: 'Tabby'} на cat = {name: 'Tabby'}, то получите ожидаемый результат.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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