美文网首页
js变量的存储问题

js变量的存储问题

作者: 莫劼 | 来源:发表于2018-08-28 15:23 被阅读0次

    首先介绍在js中变量有两种:1、基本变量 2、引用变量

    1.基本变量:String、Number、Boolean、null、undefined等等

    2.引用变量:Array(特殊的对象)、Object、Date(日期)、Function、RegExp(正则表达式)等等。概念:当声明一个变量为对象数据类型时,在堆内存中开辟了一个空间,用来存储这个值。把这个值的地址返回给变量。

    基本变量是储存在栈中引用变量式储存在堆中。

    什么叫栈?

        在百度百科有定义:栈是限定仅在表头进行插入和删除操作的线性表。

        栈是数据存储的临时地方,比如仓库,将货物存储在仓库中,需要的时候取出,当取货的时候会先将最后进的货先取出,再将最早进去的货取出,这就有一种先进后出的说法。栈是一种数据结构,是一种只有唯一的一个出口,也就是只能有一端可以进行添加或删除的一种特殊线性表。栈底是固定的,只有栈顶才是浮动的。如果栈中没有元素时,就叫做空栈。另外栈是具有记忆功能的,对栈的插入与删除是不会影响栈底的指针的。

    基础变量是直接存储在栈中,下面介绍下基础变量的互相赋值!

        var  num1 = 123;

        var  num2 = num1;    

        下面通过画图进行讲解:

    基础类型表现图

    什么叫堆?

        在百度百科有定义:是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:1.堆中某个节点的值总是不大于或不小于其父节点的值;2.堆总是一棵完全二叉树。在此就不扩展开讲堆的概念。

    引用数据是存储在堆中,存储在栈中的值是一个指针,指向存储在堆中的实际对象 ,下面用图介绍一下引用数据在堆内如何储存的。

    栈与堆简单表现图

        var obj = {}      假如创建一个对象,obj这个变量代表的值是对象的地址,也就是obj =0x131234,obj这个变量是储存在栈中,跟基础变量可以一样的理解,只是存储的数据是地址而已。当对象创建的时候,内存会在堆内给开辟个空间用于存放这个对象的数据。像name、age、功能都存在这个空间中,虽然放在堆中的空间可以进行不断的扩展,但是放置在堆内的数据,查询的起来效率会很低。

        注意:(数组是特殊的对象)当我创建一个数组时,var arr = new Array();var arr1=arr;这个arr的中储存的地址赋值给了arr1.所有这两个变量是互相影响的。形象点讲:当一个商人请来两个清洁工打扫院子,这两个清洁人是分开时间点独自来打扫院子的, 商人给这两个清洁工的地址是一样的,打扫的地方一样。假如有一天甲清洁工因不小心将院子烧了,那么另一个清洁工是不是打扫的院子就也被烧了?答案是肯定的,两个人打扫的院子是同一个院子,要毁就是一起毁。

        这就是引用数据类型的存储方式。

    相关文章

      网友评论

          本文标题:js变量的存储问题

          本文链接:https://www.haomeiwen.com/subject/tzhfwftx.html