• JavaScript内存机制


    内存模型

    JS内存空间分为栈(stack)、堆(heap)、池(一般也会归类为栈中)。 其中栈存放变量,堆存放复杂对象,池存放常量。

    基础数据类型与栈内存

    JS中的基础数据类型,这些值都有固定的大小,往往都保存在栈内存中(闭包除外),由系统自动分配存储空间。我们可以直接操作保存在栈内存空间的值,因此基础数据类型都是按值访问 数据在栈内存中的存储与使用方式类似于数据结构中的堆栈数据结构,遵循后进先出的原则。 基础数据类型: Number String Null Undefined Boolean 复习一下,此问题常常在面试中问到,然而答不出来的人大有人在 ~ ~ 

    引用数据类型与堆内存

    与其他语言不同,JS的引用数据类型,比如数组Array,它们值的大小是不固定的。

    引用数据类型的值是保存在堆内存中的对象。JS不允许直接访问堆内存中的位置,因此我们不能直接操作对象的堆内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。因此,引用类型的值都是按引用访问的。这里的引用,我们可以粗浅地理解为保存在栈内存中的一个地址,该地址与堆内存的实际值相关联。 堆存取数据的方式,则与书架与书非常相似。 书虽然也有序的存放在书架上,但是我们只要知道书的名字,我们就可以很方便的取出我们想要的书,而不用像从乒乓球盒子里取乒乓一样,非得将上面的所有乒乓球拿出来才能取到中间的某一个乒乓球。好比在JSON格式的数据中,我们存储的key-value是可以无序的,因为顺序的不同并不影响我们的使用,我们只需要关心书的名字。

    为了更好的搞懂栈内存与堆内存,我们可以结合以下例子与图解进行理解。


    var a1 = 0; // 栈
    var a2 = 'this is string'; // 栈
    var a3 = null; // 栈
    var b = { m: 20 }; // 变量b存在于栈中,{m: 20} 作为对象存在于堆内存中
    var c = [1, 2, 3]; // 变量c存在于栈中,[1, 2, 3] 作为对象存在于堆内存中

                                                                                                 栈内存空间

    变量名具体值
    c 0x0012ff7d
    b 0x0012ff7c
    a3 null
    a2 this is string
    a1 0
                                                 堆内存空间
                                                                      [1,2,3]           
                                                                                    {m:20}           

  • 相关阅读:
    使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
    HTTP协议详解(真的很经典)
    C# 读取EXCEL文件的三种经典方法
    第一范式,第二范式,第三范式
    数据库设计三大范式
    SQL 第一范式、第二范式、第三范式、BCNF
    日期选择器:jquery datepicker的使用
    copy sqlserver中DATE类型的数据转化 CONVERT
    HDU2033 人见人爱A+B 分类: ACM 2015-06-21 23:05 13人阅读 评论(0) 收藏
    SCU 4440 分类: ACM 2015-06-20 23:58 16人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/eret9616/p/9134265.html
Copyright © 2020-2023  润新知