JS 在将值赋予到变数上时
会有两个特性(Call by value(传值) 与 Call by reference(传参考))
// 传值
var name1 = '皮杰先生';
var name2 = name1;
name2 = '小鸡公主'
console.log(name1 , name2); // 皮杰先生 小鸡公主
// 传参考
// 假设此物件位址为 0x01
var 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); // 结果?
分解如下
那今天的介绍就到这里
若有任何问题 或 内容有误
都可以跟我说唷
<<: 无线网路安全-邪恶的双胞胎(Evil Twin) & 流氓接入点(Rogue Access Point)
大家好,我是转职未满一年的工程师,听到友人推荐这项IT界的盛事,今年慕名前来参加IT邦自我挑战连续发...
范例 XML 档案格式内容如下,想抓 XML 几个栏位的资料写入 table 中,SQL 语法如下 ...
在使用了 Gradle 这麽多天後,您应该会发现,几乎所有的专案都至少会用到几个 Plugin 来增...
-常用单元测试框架 - iOS - OCUnit - GHUnit - XCTest - OCMoc...
今天将会介绍简易的todo list 功能 新增事项(push将输入值放入阵列) Enter加入资料...