写出下列代码的数据结果
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。所以后续更改跟他没什么关系。
本文深入解析JavaScript中函数参数的引用传递特性,通过具体代码示例解释为何对象引用改变不会直接影响原始变量,帮助读者理解AO对象在函数调用中的作用。
2540

被折叠的 条评论
为什么被折叠?



