JS 在将值赋予到变数上时
会有两个特性(Call by value(传值) 与 Call by reference(传参考))
// 传值var name1 = '皮杰先生';var name2 = name1;name2 = '小鸡公主'console.log(name1 , name2); // 皮杰先生 小鸡公主
// 传参考// 假设此物件位址为 0x01var person = { name : '皮杰先生',}// 传参考 0x01的位址传给 person2// person2 与 person 皆指向位址为0x01的物件var person2 = person;// 这里修改0x01 当然因为 person2 与 person 皆指向位址为0x01的物件 , 所以 person 也会被修改person2.name = '小鸡公主';console.log(person , person2); // 小鸡公主 小鸡公主console.log(person === person2); // true
// 传参考var person = { name : '皮杰先生1',}var person2 = person;person2 = { name : '皮杰先生2',};console.log(person , person2);// 两者参考位置不同console.log(person === person2); // false
我们来看一下比较複杂的例子
物件参考实际运作模式
var a = { x : 1};var b = a;a.y = a = { x : 2};// a = { x : 2} 是一个运算式// a.y = a = { x : 2} 同时执行// a.y 找的是原本的参考路径console.log(a.y);console.log(b);console.log(a === b.y);
分解如下
我们再来看一题
var a = { x: 1};var b = a;a.x = { x: 2};a.y = a = { y: 1};console.log(a); // 结果?console.log(b); // 结果?
分解如下
那今天的介绍就到这里
若有任何问题 或 内容有误
都可以跟我说唷