手机版

理解Javascript_01_理解内存分配原理

时间:2021-10-22 来源:互联网 编辑:宝哥软件园 浏览:

原始值和参考值在ECMAScript中,变量可以保存两种类型的值,即原始值和参考值。原始值是指表示原始数据类型(基本数据类型)的值,即由undefined、null、number、string和boolean类型表示的值。引用值是指复合数据类型的值,即对象、函数、数组、自定义对象等。栈和堆分别对应原始值和引用值。内存有两种结构,即堆栈和堆堆栈,这是一种后进先出的数据结构。在javascript中,堆栈的行为可以通过Array来模拟。复制代码如下: var arr=[];//创建堆栈arr . push(' apple ');//按下元素' apple '[' apple ']arr . push(' orange ');//按下元素' orange' ['apple ',' orange ']arr . pop();//弹出‘橙色’[‘苹果’]arr . push(‘香蕉’);//按下元素“香蕉”[“苹果”,“香蕉”]。我们来看看对应的内存图:

原始值是存储在堆栈中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。堆是一种基于哈希算法存储数据的数据结构。在javascript中,引用值存储在堆中。引用值是存储在堆中的对象,即存储在变量(即指向对象的变量,存储在堆栈中)处的值是指向存储在堆中的实际对象的指针。示例:var obj=new Object();Obj存储在堆栈中,并指向存储在堆中的对象new Object()。那为什么要把引用值放在堆里,而把原值放在栈里呢?它们不都在记忆里吗?为什么不把它们放在一起?然后,让我们来探索这个问题的答案!首先我们来看代码:复制代码是:函数人(id、姓名、年龄){this。id=idthis.name=namethis.age=年龄;} var num=10var bol=truevar str=' abcvar obj=新对象();var arr=['a ',' b ',' c '];var person=new Person(100,' jxl ',22);然后我们来看看内存分析图:

变量num、BOL和str是基本数据类型,它们的值直接存储在堆栈中;obj、person、arr arr是复合数据类型,它们的引用变量存储在堆栈中,并指向存储在堆中的实际对象。从上图可以看出,我们不能直接操作堆中的数据,也就是说,我们不能直接操作对象,但是我们可以通过对栈中对象的引用来操作对象,就像我们通过遥控器操作电视一样,不同的是电视本身没有控制按钮。现在我们来回答为什么要把引用值放在堆里,而把原值放在栈里:记住一句话:能量是平衡的,无非是时间换空间,空间换时间的问题比栈大,栈比栈快。对象是一个复杂的结构,可以自由扩展。例如,数组可以无限扩展,对象可以自由添加属性。它们被放在堆中,以免影响堆栈的效率。相反,在操作之前,通过引用找到堆中的实际对象。与简单数据类型相比,简单数据类型相对稳定,只占用少量内存。简单数据类型不放在堆中的原因是,通过在堆中引用实际对象来查找实际对象需要时间,综合成本远远大于直接从堆栈中获取实际值的成本。所以简单数据类型的值直接存储在堆栈上。总结:程序简单,但却是一切的根本,基础最重要,因为摩天大楼也是一砖一瓦建起来的。内存是程序执行的基础。如果你理解记忆,你就会理解一切。努力工作,鼓励自己,加油!参考:JavaScript高级编程。

版权声明:理解Javascript_01_理解内存分配原理是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。