JavaScript----01_内存分配
来源:互联网 发布:手机游戏下载java 编辑:程序博客网 时间:2024/05/01 20:27
在ECMAScript中,变量可以存放两种类型的值
原始值
引用类型值
原始值指的是代表原始数据类型的值,例如:undefined null number string boolean
引用类型指的是复合类型值,例如:object function array 自定义对象
堆和栈
栈是一种LIFO的数据结构,即后进先出,队列是一种FIFO的数据结构,即先进先出
堆是基于散列算法存放数据的一种数据结构
原始值是存放在栈中的简单数据段,它们的值直接存储在变量访问的位置,例如:
var num = 10; //变量名num和初始化值10都存放在栈中
- 引用值是存放在堆中的对象,引用值的变量名是一个存放在栈中指针,指向堆中的引用值对象,例如:
var obj = new object(); //变量名obj存放在栈中,而它指向的object()对象是存放在堆中的
为什么原始值要放在栈中,引用值要放在堆中?
- 先看一段代码
function Person(id,name,age){ this.id = id; this.name = name; this.age = age;}var num = 10;var bol = true;var str = "abc";var obj = new Object();var arr = ['a','b','c'];var person = new Person(100,"笨蛋的座右铭",25);
内存分析
原始类型变量num bol str的变量名和内容都存放在栈中
引用类型变量obj arr person的变量名作为指针存放在栈中,指向堆中的变量内容
由上图可以看出,我们不能直接操作堆中的数据,也就是说不能直接操作对象,但我们可以通过栈中存放的变量指针来进行操作
- 为什么要分堆和栈
堆比栈大,栈比堆的运算速度快,对象是一个复杂的结构,并且可以自由扩展,如:数组可以无限扩充,对象可以自由添加属性。将他们放在堆中是为了不影响栈的效率。而是通过引用的方式查找到堆中的实际对象再进行操作。相对于简单数据类型而言,简单数据类型就比较稳定,并且它只占据很小的内存。不将简单数据类型放在堆是因为通过引用到堆中查找实际对象是要花费时间的,而这个综合成本远大于直接从栈中取得实际值的成本。所以简单数据类型的值直接存放在栈中
总结
两种变量类型:原始值和引用类型值
变量在内存中的存放位置分为堆和栈
0 0
- JavaScript----01_内存分配
- JACK_C#_内存分配
- 分配内存_释放内存
- javascript的内存分配
- 关于javascript内存分配
- javascript的内存分配
- Javascript内存分配
- JavaScript内存分配
- [LDD3速记]_内存分配
- 关于JavaScript的内存分配
- Java虚拟机_内存管理_内存分配
- 一 javascript的内存分配javascript
- 内存子系统1_分配接口
- C语言_动态内存分配
- Java基础_内存分配全面解析
- 内存_预留内存与连续内存分配
- 操作系统_内存动态分区分配_算法模拟_JAVA
- JVM_Java内存管理篇_内存分配(一)
- WCF服务器向客户端播送消息和心跳检测
- pl/sql中的循环控制
- 浮点数二进制表示
- POJ1979——Red and Black
- tr td colSpan(列) rowSpan(行)合并
- JavaScript----01_内存分配
- 9.1AT课堂M笔记
- 【STL】deque的常用方法
- Android 关于 px、dp、sp 的那些事
- [GDOI2017模拟9.4]同桌的你
- Arithmetic Progression
- Codeforces 588 C Duff and Weight Lifting【思维】
- HTTP协议知识点
- bzoj1179(缩点+乱搞)