Привет, у меня есть вопрос об этом коде, почему он печатает «Дикий» вместо «Полосатый».
var cat = { name: "Athena" };
function swap(feline) {
feline.name = "Wild";
feline = { name: "Tabby" };
}
swap(cat);
console.info(cat.name);


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


feline в качестве идентификатора является локальной переменной для вашей функции. В начале оно относится к cat извне, поэтому изменение части объекта видно снаружи.
Однако, когда вы устанавливаете feline совершенно новый объект, это происходит локально.
var cat = { name: "Athena" };
function swap(feline) {
console.info("feline, cat:",feline.name,cat.name,"feline===cat:",feline===cat);
feline.name = "Wild";
console.info("feline, cat:",feline.name,cat.name,"feline===cat:",feline===cat);
feline = { name: "Tabby" };
console.info("feline, cat:",feline.name,cat.name,"feline===cat:",feline===cat);
}
swap(cat);
console.info("cat:",cat.name);
Из отмеченного дубликата: В частности, когда вы передаете объект (или массив), вы (невидимо) передаете ссылку на этот объект, и можно изменить содержимое этого объекта, но если вы попытаетесь перезаписать ссылку, это не повлияет на копию ссылки, хранящуюся у вызывающего объекта.