Объекты - ссылочый тип данных, когда какой-либо переменной мы присваиваем значение объекта, то мы присваиваем ссылку на этот объект, который хранится в памяти.
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'}
, то получите ожидаемый результат.