在 JavaScript 中,只有原始型别为传值(Call by value)
范例:
var a = 100;
var b = a; // 复制 a 的值,并赋予给 b
b -= 10; // 修改 b 的值
console.log(a, b); // 100 90
从范例中 a
为原始型别,
var b = a
会复制 a
的值来建立新增记忆体位址,
并且让 b
指向新增记忆体位址当中,
也就是说 a
和 b
都有各自的记忆体位址,
因此修改 b
的值时,a
不会一并修改,
这称之为传值(Call by value)
图解:
也称为传参考,在 JavaScript 中,
只有物件型别为传址(Call by reference)
范例:
var a = {
name: '小明',
};
var b = a;
b.name = 'weiwei';
console.log(a); // {name: 'weiwei'}
console.log(b); // {name: 'weiwei'}
该范例中 a
为物件型别,
而 var b = a
会让 b
指向 a
的记忆体位址,
因为指向的记忆体位址相同,
因此当 a
或 b
的内容被修改时,
这两个变数的值都一起会被修改,
这称之为传址(Call by reference)
图解:
再看一个范例:
var family = {
name: '小明',
members: {
dad: 'dad',
mom: 'mom',
}
};
var member = family.member;
member = {
name: 'weiwei',
};
console.log(member); // {name: 'weiwei'}
console.log(family.members); // {dad: 'dad', mom: 'mom'}
该范例结果能看到 member
和 family.members
的值不一样
那是因为我们在 member = {name: 'weiwei'}
时,
已经将记忆体位址已经指向 {name: 'weiwei'}
了,
因此结果会不一样
图解:
以上就是传值和传址的内容,感谢观看!!
>>: 1.3 Design System - 包含哪些项目要做?
前言 Laravel:Route Wildcards - iT 邦帮忙::一起帮忙解决难题,拯救 I...
[ 30 Days of ML Challenge | D03] 今天提供一个文件以及一个练习教材,...
接续昨天的运算子(Operator): 等值运算子 Java操作 运算子 等於 == 不等於 != ...
结束了为期三天的枢纽分析表,接着进到另一大主题,图表 (>ε<) 相信大家都知道图表可以让冗长的资数...
阵列一些操作阵列好用的方法 这篇整理一些常用的阵列方法 push() push 可以新增元素在阵列的...