argumental在javascript参考不一致(argumental reference in

2019-08-20 07:34发布

我在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的数组参数?

Answer 1:

使用Javascript总是按值传递参数,所以这是不行的:

 function foo(x) {
    x = 100;
 }

 y = 5
 foo(y)
 y == 100 // nope

但是这样做的工作:

 function foo(x) {
    x.bar = 100;
 }

 y = {}
 foo(y)
 y.bar == 100 // yes

在第二个片断X仍然由值来传递,但是这很值是一个参考(指针)的一个对象。 因此,它在功能可能取消对它的引用和访问什么是“内部”的对象。



文章来源: argumental reference inconsistency in javascript