zoukankan      html  css  js  c++  java
  • 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}           

  • 相关阅读:
    MySQL优化十大技巧
    50个常用sql语句 网上流行的学生选课表的例子
    JDK常用命令
    linux中用date命令获取昨天、明天或多天前后的日期
    ***如何优雅的选择字体(font-family)
    将WordPress安装在网站子目录的相关问题
    PHP源码加密- php-beast
    如何安装ioncube扩展对PHP代码加密
    PHP防止表单重复提交的解决方法
    CI中SESSION的用法及其注意
  • 原文地址:https://www.cnblogs.com/eret9616/p/9134265.html
Copyright © 2011-2022 走看看