在看谷粒学院 JavaScript 进阶 课程的时候,老师讲到了引用变量赋值的问题,关于以下这一部分并不是很理解。
var a = {age: 12};
var b = a;
a = {name: "Bob", age: 13};
b.age = 14
console.log(b.age, a.name, a.age); // 14 Bob 13
function fn2 (obj) {
obj = {age: 15};
}
fn2(a);
console.log(a.age); // 13
我便回顾了一下 JavaScript 基础课程 p59 (函数作用域) 。李立超老师讲了一句非常帮助理解的话:在函数中传一个形参就相当于在函数作用域中声明一个新的变量。
所以我们再看这个例子,把 a 作为实参传入 fn2 中的过程便相当于:
var obj = a;
obj = {age: 15};
这样便很清楚地可以看到,传实参相当于把 a 的内容复制一份给 obj ,接着 obj 又指向了另一个内容。可见 a 的内容并没有改变。
所以打印出的值为 13 。
自己琢磨出来的,不知是否正确或妥当。希望帮助大家理解。