1、概述
简单值(基本类型)通过值复制的方式来赋值/传递。
复合值(对象)通过引用复制的方式来赋值/传递。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<title>值和引用</title>
</head>
<body>
<script type="text/javascript">
var a = 2;
var b = a;
b++;
//2是基本类型(位于常量池),a是该值的一个副本,b是另外一个副本,b改变时不影响a
console.log(a); //2
console.log(b); //3
var c = [1, 2, 3];
var d = c;
d.push(4);
//c和d都是执行数组(位于堆中)的2个不同引用。他们更改的是同一个值。
console.log(c); //[1,2,3,4]
console.log(d); //[1,2,3,4]
</script>
</body>
</html>
结合内存示意图,理解会更深刻。
简单类型的值在常量池只有一份,变量a和变量b都是常量池中2的一个副本。
变量c和变量d都是指向堆中的一个数组对象。