首先先看问题
var a = 3;
var b = a;
b = 10;
alert(a+","+b);
答案很明显:3,10 。
var arr = [1,2,3];
var brr = arr;
brr[0] = 5;
alert(arr);
alert(brr);
两次的结果都是5,2,3 。
出现这种情况的原因是:在定义变量的时候,栈内存里只能存放简单数据类型,比如数字,字符之类,所以定义a = 3的时候在栈里开辟出一块空间存放a,定义b=a的时候开辟另一块空间存放b,他俩的值是一样的;但当定义的变量是数组时,由于数组里元素数不固定,整个数组属于复杂数据类型,而复杂数据类型只能放到堆内存里,我们定义的数组arr在栈内存储存的是一个十六进制得地址,这个地址是指向存放数组内容的堆内存的,这时再去定义数组brr = arr时,是把栈里的地址值赋值给了brr,arr和brr是指向同一块堆内存的,所以对arr和brr中的任何一个操作,都会影响另一个。
网友评论