var cat = { name: 'Athena' };
function swap(feline) {
feline.name = 'Wild';
feline = { name: 'Tabby' };
}
swap(cat);
console.log(cat.name);
feline = {name:'Tabby'}var cat = { name: 'Athena' };
function swap(feline) {
feline.name = 'Wild';
feline = { name: 'Tabby' };
}
swap(cat);
console.log(cat.name);
feline = {name:'Tabby'}in here you have two variables
so when you are passing the cat to swap function, actually you passing reference to cat variable, that is address of cat variable. because of this feline will point to original object of cat. so when you change feline.name, you are actually changing cat
then you are assigning another variable that is
feline = { name: 'Tabby' };
by doing this now feline variable is no longer pointing to same cat object, so cat object which have name 'wild' will be logged
When you pass cat as a parameter to the swap function, you are giving the reference to the cat variable. So now feline points to the same reference as cat. Both are looking at the same object through reference.
feline.name = 'Wild'
feline changes the name of the object it is referencing. Since the variable cat also looks at the object in this reference, it will display 'Wild' when it reaches the name via cat.
feline = { name: 'Tabby' }
Where you assign a new object, a new reference to the feline variable. So it no longer looks at the reference the cat variable is looking at. In short, cat is unaffected.
I tried to summarize very briefly without going into details.