несоответствие аргументных ссылок в JavaScript

Недавно я столкнулся с неприятной проблемой в JS.

Допустим, мы передаем карту, массив объектов в функцию f.

var o=[{a:0}];
function f(a){
    for(var i in a){
        if (a.hasOwnProperty(i)){
            a[i]=null;
        }
    }
    return a;
};
var outp=f(o);

alert(outp[0]+" === "+o[0]+" : "+(outp[0]===o[0]));

// here we expect loose equality, and equality in type, 
//furthermore it should identically equal as well, and we got right!

Но мы не можем передать полную ответственность объекта функции в качестве аргумента, как в функциональной парадигме.o=(function(o){return o})()потому что на любую модификацию o не ссылаются!

var o=[];
function ff(a){
    return (a=undefined);
};
var outp=ff(o);
alert(outp+" === "+o.constructor+" : "+(outp===o));
// here we expect true, but we got false!

Почему вышеописанная потеря ссылок и предположительно другая обработка ссылок во втором случае использования, хотя в обоих случаях функции получили аргумент массива в позиции 0.?

Ответы на вопрос(1)

Ваш ответ на вопрос