关于3-4 a输出问题

关于3-4 a输出问题

var a=[4];

var b=a;

a=[4,44];

document.write(b+"<br />");//4

a=b;//

document.write(a+"<br />")//这里输出为 4  

b.push(44);//

document.write(a+"<br />");//这里输出为什么输出为 4.44呢?怎么个理解是正确的?




正在回答

登陆购买课程后可参与讨论,去登陆

2回答

document.write(a+"<br />")//这里输出为 4    这里的时候b =[4],然后又把b赋值给了a,所以输出4

document.write(a+"<br />");//这里输出为什么输出为 4.44呢    这里是因为b.push(44);把44压入了数组b,它会改变b原有的数组,所以现在是a=b = [4,44]。所以会输出4,44

小王子抓猫咪 2017-07-24 21:14:32

数组是引用类型,保存在堆中。而在栈中保存的是数组在内存中存储的地址。所以a=[4] b=a 就是把[4]在堆中的地址保存给a变量,接着又把这个地址保存在b变量中。a=[4,44]是把其他数组的地址保存在a变量中。这样不会影响到b。 而想后面a=b 然后修改任意一个变量的值,都会影响另外一个变量。因为此时两个变量保存的地址都是一样的,修改的是地址,而不是值。

  • 潜狸 #1
    那么这么说来,a这变量同时保存了[4]和[4,44]两个不同的地址对吧?
    2017-12-02 11:22:10
  • 引用类型是保存在堆中的,如果你将一个引用类型的值赋值给变量,那么这个变量保存的值是一个内存地址。这个变量如果被赋值了其他引用类型,就会把变量值替换成其他内存地址。这个变量保存的并不是数组,是数值(基本数据类型)。只有基本数据类型是保存在栈中的,而栈是一系列连续的内存地址。而堆不是。 既然python有id函数查看内存地址,那么完全可以用id去检查一下变量的地址就知道是不是同一个数据了。
    2017-12-02 13:13:40
  • 我去,我还以为是python下面的问题。原来是JS。 JS里面没有ID函数,是没有办法查看变量地址的。 不过很多语言都是一样的。只需要记住引用类型赋值给变量,这个变量保存的并不是这个引用类型的值,而是它的内存地址。
    2017-12-02 13:16:03
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
HTML5与CSS3实现动态网页 2018
  • 参与学习       1887    人
  • 提交作业       4643    份
  • 解答问题       5760    个

有HTML和CSS基础,却不知道如何进阶?本路径带你通过系统学习,完成从“会做网页”到“做出好的动态网页”的蜕变,迈出成为前端工程师的第一步。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师