Пояснить почему ссылка на объект не изменилась?
Если написать вот таким "псевдокодом", станет понятнее?var obj = {
a: 1
};
(function(var obj){
obj = {
a: 2
}
})(obj)
console.log(obj)
(такой код не выполнится, но он покажет суть, как будет работать ваш код).
Конструкция obj = { a: 2 }, выполняет re-declare.
Если хотите мутировать объект, тогда пишите Object.assign(obj, { a: 2 })  или obj.a = 2