javascript值传递疑惑

以前一直以为,给函数传递了对象,那么在函数体内对对象属性的更改,必然可以在全局反映出来。


比如:


var setName=function(o){

  o.name='xiaoha';

};

var o1={};

setName(o1);

console.log(o1.name);//'xiaoha'

这没错啊,运行结果跟自己想的一模一样的。

可是看了高程3后,发现想错了。


如下:


var setName=function(o){

  o.name='xiaoha';

  o={};

  o.name='22222';

};

var o1={};

setName(o1);

console.log(o1.name);//'xiaoha'

这个怎么解释,才能让人心服口服啊!高程3解释,还是不懂啊!


青春有我
浏览 551回答 6
6回答

蓝山帝景

参数 o 是 o1 所引用的对象的引用o = {} 是 改变了 o 的引用, o1 和它引用的对象都不受影响

至尊宝的传说

慕田峪7331174

楼上的解释很清晰。其实这种直接修改参数的方式应该避免,很容易bug的。应该通过函数返回结果。

慕姐4208626

这个和python差不多,o=o1 o.name='xiaoha' o={}#改变引用 o.name='22222'

炎炎设计

JS中都是参数传递都是传值的,只不过是在涉及到对象时,传的是地址信息当一个对象标识符被重新赋值时,其对应的地址就会发生变化,对应到不同的地址空间上而原始标识符对应的地址没有被修改,所以就这样了~~~~
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript