<script> var a = [1,2,3]; var b = a; b = 100; // 重新给b赋值 并不会影响a alert(a) </script> <script> var a = [1,2,3]; var b = a; b.push(4); // 这样 a b是指向一个内存空间,b push 之后 会 影响a alert(a) </script>
var a=[1,2,3]; var b=a; b=100; alert(a);理解为: 变量是路标,内存是位置,变量赋值后指向内存的某个位置。 你给b变量赋值为a路标,就是说a、b路标都指向同一个位置。 然后b=100;相当于改变了b路标指向的位置,但a路标的位置会改变么?当然不会,原位置的内容会受影响么?当然也是不会的。
<script> var a = [1,2,3]; var b = a; b.push(4); // 这样 a b是指向一个内存空间,b push 之后 会 影响a alert(a) </script> 这段,理解为: 给b赋值为a,所以a、b路标指向同一个位置。 b.push(4);根据b路标找到位置,然后改变了这个位置的内容(注意,这不是给b重新赋值,而是调用了对象的一个方法,所以b路标指向的位置是没有变化的,就像在该位置又建了一栋楼,于是这儿的环境变了,但是仍然在那个位置)。 由于a、b路标指向同一个位置,所以你再根据a路标找到位置,内容当然是和b路标指向位置的内容相同。
var a=[1,2,3] var b=a b=100 alert(a) a和b是独立的 这么说能理解吗?还有就是 这个问题的 知识点就是 javascript 的2种类型 基本类型 和 引用类型 百度 “javascript 基本类型 引用类型”
var a = [1 , 2 , 3];//给变量b赋值,仍是一个引用 , 内容为变量a所指向的内容
var b=a//给变量b赋值,直接将内容写入栈中。但对于a的内容则无影响
b=100
//显示变量a内容,a仍未其引用值,数组[1 , 2 , 3]
alert(a)
栈(stack)中存储简单数据段,也就是说,它们的值直接存储在变量访问的位置。而这个变量存储的位置由系统自动分配,大小固定,所以访问速度快。
堆(heap)中存储复杂的数据对象的引用,也就是说,存储在变量访问位置的是一个指针,它指向了真正存储内容的内存的地址。因堆是有程序控制创建的,所以大小不固定,访问速度慢。不知道是否说的清楚,如果有误,还请各位不吝赐教!
比如var a=3; 是不是a在栈中有个地址,3也有个地址,然后将a指向3的地址,3的地址就是指针吗?还是那个指向是指针啊?
<script>
var a = [1,2,3];
var b = a;
b = 100; // 重新给b赋值 并不会影响a
alert(a)
</script>
<script>
var a = [1,2,3];
var b = a;
b.push(4); // 这样 a b是指向一个内存空间,b push 之后 会 影响a
alert(a)
</script>
栈 , 存放的是简单数据和复杂数据的存放地址。
也就是说,如果存储的是个简单数据如数字 “3” , 那么就会直接将这个3存放在栈中。
而如果存储的是个复杂数据对象如:“{id : 123 , name : 'zhangsan' , sex : 'male'}” , 那么该对象其实是存储在堆中的,栈中只是保存了一个该对象在堆中存放的位置。因为程序运行是先去栈中查找值的,所以一旦在栈中发现保存的是个地址,那么就会进一步再去堆中,按照该地址取出存放在堆中的数值。
堆,存放的是复杂的数据对象,并在栈中保留一个堆中的地址信息,以便程序运行时在栈中找到此对象的引用地址,并获取正确的值。
var b=a;
b=100;
alert(a);理解为:
变量是路标,内存是位置,变量赋值后指向内存的某个位置。
你给b变量赋值为a路标,就是说a、b路标都指向同一个位置。
然后b=100;相当于改变了b路标指向的位置,但a路标的位置会改变么?当然不会,原位置的内容会受影响么?当然也是不会的。
var a = [1,2,3];
var b = a;
b.push(4); // 这样 a b是指向一个内存空间,b push 之后 会 影响a
alert(a)
</script>
这段,理解为:
给b赋值为a,所以a、b路标指向同一个位置。
b.push(4);根据b路标找到位置,然后改变了这个位置的内容(注意,这不是给b重新赋值,而是调用了对象的一个方法,所以b路标指向的位置是没有变化的,就像在该位置又建了一栋楼,于是这儿的环境变了,但是仍然在那个位置)。
由于a、b路标指向同一个位置,所以你再根据a路标找到位置,内容当然是和b路标指向位置的内容相同。
var b=a
b=100
alert(a)
a和b是独立的 这么说能理解吗?还有就是 这个问题的 知识点就是 javascript 的2种类型 基本类型 和 引用类型
百度
“javascript 基本类型 引用类型”