写出下列代码的数据结果
var a = {a:1},b={b:2}
!function(agu1, agu2){
agu1 = agu2;
agu2['c'] = 3;
}(a,b)
console.log(JSON.stringify(a),JSON.stringify(b))
本来以为考的是引用传递,认为agu1 = agu2 使a = b, 所以输出结果应该都是{"b":2,"c":3} ,结果不出意料的挂了。在浏览器运行结果是 {"a":1} {"b":2,"c":3}
做一回事后诸葛分析一下,这里用到AO对象(不了解的自行百度学习),过程以注释的方式写在代码中。
var a = {a:1},b={b:2}
!function(agu1, agu2){ // AO.agu1 AO.agu2
agu1 = agu2; // AO.agu1 = AO.agu2
agu2['c'] = 3; // AO.agu2['c'] = 3
}(a,b)
console.log(JSON.stringify(a),JSON.stringify(b))
这里考的是引用传递没错,所以b输出结果是{"b":2,"c":3} ,但为什么b变了,但a没变呢。大多数同学应该都会跟我一样认为agu1 = agu2 使a的应用指向b,所以会和b结果一样。但如果用AO对象来分析,那么指向b的是AO.agu1,而不是a。所以后续更改跟他没什么关系。