1、基本数据类型
// 创建一个变量n并且赋值为10 本质就是在栈区创建一个空间 将10这个值放到这个存储空间中
var n = 10;
// 创建一个k变量 并且赋值为n变量的值
// 赋值 编程语言中永远是将变量在栈区中存储的内容赋值给另外一个变量
var k = n;
// 将n变量栈区中的值修改为20
n = 20;
console.log(k);
2、引用数据类型
// 在栈区创建了arr这个变量,将数据存储到堆区中.
//堆区的数据存在一个内存地址 所以在栈区记录这个内存地址
var arr = [1, 2, 3];
// 创建arr2这个变量并且将arr在栈区的地址赋值给arr2这个变量
//最终arr与arr2变量指向到堆区的同一份数据
var arr2 = arr;
// 修改arr2数组中1号元素值为200
//本质是根据栈区的内存地址找到堆区将堆区的值修改为200
arr2[1] = 200;
// 因为arr 与arr2两个变量指向相同的空间 所以一个修改 另外一个也修改了
console.log(arr);
3、修改代码
// 在栈区创建了arr这个变量,将数据存储到堆区中.
//堆区的数据存在一个内存地址 所以在栈区记录这个内存地址
var arr = [1, 2, 3];
// 创建arr2这个变量并且将arr在栈区的地址赋值给arr2这个变量
//最终arr与arr2变量指向到堆区的同一份数据
var arr2 = arr;
// 修改arr2数组中1号元素值为200 本质是根据栈区的内存地址找到堆区将堆区的值修改为200
// arr2[1] = 200;
// 因为arr 与arr2两个变量指向相同的空间 所以一个修改 另外一个也修改了
// console.log(arr);
arr2 = 200;
console.log(arr);
总结:
1、每一个变量都会在栈区中出现
2、变量直接直接赋值或者变量赋值(变量名称=) 永远是将自己栈区的值进行修改 如果赋值的是变量 永远将变量的栈区的值进行赋值
3、基本类型直接相互赋值 一个变量修改对另外一个变量 没有影响
4、引用类型相互赋值,如果直接赋值修改一个引用类型 另外一个变量不受影响 如果顺着内存地址修改数据 另外一个变量受到影响