首页 新闻 会员 周边

关于堆和栈的问题

2
[已解决问题] 解决于 2017-04-27 17:08
<script>
  var a = [5,6];
  var b = a;
  b[0] = 'hello';
  console.log(a[0]);
 
  
  这个得到的结果是hello,不知道是为什么,之前听说的堆栈的知识,但是现在没看懂,请求大神帮忙解答一下~~
</script>
奋斗的少年-欧耶的主页 奋斗的少年-欧耶 | 菜鸟二级 | 园豆:214
提问于:2017-04-26 17:09
< >
分享
最佳答案
1

1、a 变量存储的是数组的索引地址,目前只有a 自己知道这个地址并访问

2、接下来 a 将这个地址给了 b ,b 也得到了这个地址,并且能够通过地址访问这个数组

3、然后你改变了数组下标 0 的元素值

4、因为 a 和 b 指向的是同一个数组,a 能获取到 b 对数组操作后的内容。

其实说白了,就是两个变量指向了同一个数组索引地址,不管是用 a 操作数组,还是用 b 操作数组,修改的最终结果都是该数组元素值改变。这两个值是耦合关系,就相当于 a 和 b (俩人)共用了一个(冰箱)数组, b 把 [5, 6] 中的 5 变成了 'hello' ,a 看到的最终就是 ['hello', 6] 。

奖励园豆:5
名字不好起啊 | 菜鸟二级 |园豆:401 | 2017-04-27 14:51

 昨天自己也查了资料    你这比喻是真的好~~  够形象,够具体  理解了~  谢谢!!!

奋斗的少年-欧耶 | 园豆:214 (菜鸟二级) | 2017-04-27 17:05

@奋斗的少年-欧耶: 不客气,我喜欢回答问题,^o^

名字不好起啊 | 园豆:401 (菜鸟二级) | 2017-04-28 11:58
其他回答(5)
2

只要理解a和b指向的内存地址是相同的就行了,说白了b=a以后 a和b就是同一个东西了,只不过这个东西有两个名字

Walterwhatwater | 园豆:202 (菜鸟二级) | 2017-04-26 17:15
0

这是值类型和引用类型的问题,去搜索下,有很多优秀的回答。

逐影 | 园豆:982 (小虾三级) | 2017-04-26 17:31

 昨天搜索了一下  这下明白了  谢谢解答~

支持(0) 反对(0) 奋斗的少年-欧耶 | 园豆:214 (菜鸟二级) | 2017-04-27 17:06
0

还是那个建议:成为一个正经程序员的第一步:买本c程序设计.

从c开始学编程.不然就会有这样的问题.

吴瑞祥 | 园豆:29449 (高人七级) | 2017-04-26 19:03

恩恩 好的 

支持(0) 反对(0) 奋斗的少年-欧耶 | 园豆:214 (菜鸟二级) | 2017-04-27 17:07
0

<script>
var a=[5,6];
var b=['hello','world'];
b=a;
alert(a[0]);
</script>

这样的话输出的是5
smile,你 | 园豆:204 (菜鸟二级) | 2017-04-26 21:02
0
var a = [5,6]; //a 地址指向 01010001(假设)
  var b = a;//b 地址指向 01010001
  b[0] = 'hello';// 01010001的【0】 的值被修改成hello
  console.log(a[0]);
雨V幕 | 园豆:204 (菜鸟二级) | 2017-04-27 15:27

 现在理解了    谢谢解答~~

支持(0) 反对(0) 奋斗的少年-欧耶 | 园豆:214 (菜鸟二级) | 2017-04-27 17:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册