一门语言的内存存储方式是我们学习他必须要了解的,接下来让我浅谈一下自己对他的认识。

首先说,JavaScript中的变量包含两种两种类型:

1)值类型或基本类型:undefined、null、number、boolean、string,这些类型在内存中分别占有固定大小的空间,他们的值保存在栈(Stack)中,一般说他们是按值访问的。

2)引用类型:Object

  (1)原生引用类型,由ECMAScript标准定义:Array   String   Number   Data   Boolean等

  (2)宿主引用类型,由浏览器提供

  (3)自定义引用类型

  这些类型值是对象,大小不固定,故不能存放在栈中,但是它们的内存地址是固定的,因此可以将内存地址保存在栈内存中。而包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针。当需要寻找引用类型的变量时,可以先从栈中读取该内存地址,然后再通过该地址找到堆(Heap)中的值。一般说他们是按引用访问的。

接下来,看一下复制变量值

a)值类型或基本类型:从一个变量向另一个复制基本类型的值,会创建这个值的一个副本,但两个变量不会相互影响。

  看代码:

      

  我们可以看到,x、y互相改变后不影响对方的值。

2)引用类型:从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象。

  看代码:

      

  我们可以看到,arr2和arr3都是保存的一个数组对象的内存地址,作为指针都指向该数组对象,而不是对象本身。该数组本身发生变化时,因为两个指针的指向没有变化,所以打印的结果是一样的。

如果想检测一个值是何种类型,请看

  i)用 typeof检测基本类型

  ii)用 instanceof检测变量是不是某引用类型的实例

综上,对于基本类型的值,因其大小固定,且只占用很小的内存的空间,故放在栈中,查找速度也较快。对于引用类型的值,因其大小不固定,且容易占用大量内存,故放入堆中,但查找速度较慢。

头回写这种东西,如有错误望指出,谢谢。

浅谈JavaScript中的内存管理的更多相关文章

  1. 浅谈JavaScript中的闭包

    浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...

  2. javascript中的内存管理和垃圾回收

    前面的话 不管什么程序语言,内存生命周期基本是一致的:首先,分配需要的内存:然后,使用分配到的内存:最后,释放其内存.而对于第三个步骤,何时释放内存及释放哪些变量的内存,则需要使用垃圾回收机制.本文将 ...

  3. 浅谈JavaScript中的null和undefined

    浅谈JavaScript中的null和undefined null null是JavaScript中的关键字,表示一个特殊值,常用来描述"空值". 对null进行typeof类型运 ...

  4. 浅谈JavaScript中的正则表达式(适用初学者观看)

    浅谈JavaScript中的正则表达式 1.什么是正则表达式(RegExp)? 官方定义: 正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去 ...

  5. javascript中的内存管理

    目录 简介 内存生命周期 JS中的垃圾回收器 引用计数垃圾回收算法 Mark-and-sweep回收算法 调试内存问题 闭包Closures中的内存泄露 javascript中的内存管理 简介 在c语 ...

  6. 浅谈JavaScript中闭包

    引言 闭包可以说是JavaScript中最有特色的一个地方,很好的理解闭包是更深层次的学习JavaScript的基础.这篇文章我们就来简单的谈下JavaScript下的闭包. 闭包是什么? 闭包是什么 ...

  7. 浅谈JavaScript中的正则表达式

    引言 对于正则表达式我想作为程序员肯定使用过它,那天书般的表达方式,我用一次就记住它了.这篇博客先介绍一些正则表达式的内容,然后介绍JavaScript中对正则表达式特有的改进.下面开始介绍正则表达式 ...

  8. 浅谈JavaScript中的继承

    引言 在JavaScript中,实现继承的主要方式是通过原型链技术.这一篇文章我们就通过介绍JavaScript中实现继承的几种方式来慢慢领会JavaScript中继承实现的点点滴滴. 原型链介绍 原 ...

  9. 浅谈JavaScript中的变量、参数、作用域和作用域链

    基本类型和引用类型 在JavaScript中有两种数据类型值.基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值指的是可能由多个值构成的对象.在JavaScript中有5种基本数据类型 ...

随机推荐

  1. [Linux] rlwrap - 解决Linux下sqlplus退格、上翻键乱码问题

    在Linux下使用sqlplus你会发现:退格键无法正常使用(乱码),上翻键也无法正常显示历史功能,非常讨厌! 为了让退格键和上翻键在sqlplus里正常发挥它的作用,我们必须安装一个软件 - rlw ...

  2. 3-07. 求前缀表达式的值(25) (ZJU_PAT数学)

    题目链接:http://pat.zju.edu.cn/contests/ds/3-07 算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.前缀表达式指二元运算符位于两个运算数之前,比如2+3*(7 ...

  3. ios5和ios6横竖屏支持及ipad和iphone设备的判断

    ios5和ios6横竖屏支持及ipad和iphone设备的判断 判断是ipad还是iphone设备.此定义在PayViewControllerDemo-Prefix.pch 定义如下: #define ...

  4. iOS 动态加入button

    按现有的button之后自己主动创造一个新的button,并为新button加入事件,因此,当您单击弹出提示框. 于viewcontroller.h添加 @property (weak, nonato ...

  5. H264标准句法表中C的含义理解

    下面一段是H264官方中文版中给出的解释: “类别(在表中以C 表示)规定条带数据可以至多划分为三种条带数据类别.条带数据类别A 包含了类别2的所有语法元素.条带数据类别B 包含了类别3 的所有语法元 ...

  6. asp.net中的绝对路径和相对路径

    一.关于相对路径和绝对路径相对路径转绝对路径一般,我们在ASP.NET网站中往往需要把一个相对路径转化为绝对路径.通常是用Server.MapPath()方法.比如网站根目录下有 个"Upl ...

  7. FormData实现文件上传实例

    单提交,文件上传是一个常用又十分麻烦的功能,以前要上传文件通常都是借助插件或者flash来实现,噼里啪啦的加载一大堆东西.自从有了HTML5的FormData后,老板再也不用担心我的上传了. Form ...

  8. C++ typedef与const

    1.typedef 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间:  typedef     int        INT; ...

  9. Android Handler之使用小结

    在android开发中,使用Handler处理各种消息机制. Handler用于处理和从队列MessageQueue中得到Message.一般我们要重写Handler的handleMessage(Me ...

  10. PHP常用类型判断函数总结

    1.gettype():获取变量类型 2.is_array():判断变量类型是否为数组类型 3.is_double():判断变量类型是否为倍浮点类型 4.is_float():判断变量类型是否为浮点类 ...