我在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})()
因为任何一种修改邻没有被引用!
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!
为什么上述参考损失和可能不同referencce处理在第二使用情况下,虽然在这两种情况下,功能得到了在位置0的数组参数?