两段代码

1
2
3
4
5
6
7
8
9
10
11
12
function person() {
return {
name:"a",
age:22
}
};

var obj1 = person();
var obj2 = person();
obj1.name = 'b';
console.log(obj1);
console.log(obj2);

结果

1
2
{name: "b", age: 22}
{name: "a", age: 22}
1
2
3
4
5
6
7
8
9
10
11
12
13
let obj = {
name:"a",
age:22
}
function person() {
return obj
};

var obj1 = person();
var obj2 = person();
obj1.name = 'b';
console.log(obj1);
console.log(obj2);

结果

1
2
{name: "b", age: 22}
{name: "b", age: 22}

结果不同的原因也可以理解为浅拷贝和深拷贝引用,第一段代码里的 obj1 和 obj2 分别是函数 person 返回的完全独立的对象,所以修改一个不会影响另一个。
第二段代码里的 obj1 和 obj2 是指向 obj 的指针,修改其中一个会直接修改 obj 的内容