关于js对象参数的讨论 用街道类比

var obj = { p: 1 };

function f(o) {
  o.p = 2;
}
f(obj);

obj.p // 2

上面代码中,传入函数f的是参数对象obj的地址。因此,在函数内部修改obj的属性p,会影响到原始值。

注意,如果函数内部修改的,不是参数对象的某个属性,而是替换掉整个参数,这时不会影响到原始值。

 

因为上述中对象obj举个例子,指的地址是1101-1110 这一条街(内存段),改变了这条街P店的名字,所以这条街就发生了改变,自然obj.p就会被影响

 

var obj = [1, 2, 3];

function f(o) {
  o = [2, 3, 4];
}
f(obj);

obj // [1, 2, 3]

上面代码中,在函数f内部,参数对象obj被整个替换成另一个值。这时不会影响到原始值。这是因为,形式参数(o)的值实际是参数obj的地址,重新对o赋值导致o指向另一个地址,保存在原地址上的值当然不受影响。

 

因为上面这个代码就是把另外的街道地址交给o管理了,obj依然管理着1101-1110 这一条街(内存段),自然是不会有变化的,

记住这里指针是不会被改变的 函数没这么大的权利!

(不正确的地方还希望大牛指出纠正)

posted @ 2018-09-06 15:41  博客小鹏鹏  阅读(124)  评论(0编辑  收藏  举报