JS中函数的共享传递,按值传递,引用传递
共享传递是实参对象的引用的副本
按值传递是实参的值的副本
引用传递是实参的引用
用c++里面的知识来讲就是共享传递是实参对象的指针的副本,按值传递是实参的值的副本,引用传递是实参的指针。如下图
function changeStuff(a, b, c) {
a = a * 10;//值的副本
b.item = "changed"; //b.item表示值的item,值里面的item属性变了
c = {item: "changed"};//指针副本指向{item: "changed"}
}
var num = 10;
var obj1 = {item: "unchanged"};
var obj2 = {item: "unchanged"};
changeStuff(num, obj1, obj2);
console.log(num);
console.log(obj1.item);
console.log(obj2.item);
// 输出结果
10
changed
Unchanged
js中没有引用传递,只有两种
基本数据类型传递到函数是按值传递,
引用数据类型传递到函数是共享传递
思考题:下面这里输出什么呢?
var obj1={x:5};
var obj2=obj1;
obj1.a=obj1={x:6};
console.log(obj1.a);
console.log(obj2.a);