前端js堆栈
1、介绍
创建数据的时候就会占用内容、内存主要开辟了两类空间
1. 堆(进程,线程共享)
大小不固定,可随时增加
不允许js直接访问堆内存
存储引用类型数据
按引用访问
存储的值大小不定,可动态调整
主要用来存放对象
空间大,但是运行效率相对较低
无序存储,可根据引用直接获取
2. 栈(线程)
创建的时候就确定了大小,故可能会溢出
按照顺序存放 先进后出
存储基础数据类型以及引用类型数据的堆地址
按值访问
存储的值大小固定
由系统自动分配内存空间
空间小,运行效率高
栈中的DOM,ajax,setTimeout会依次进入到队列中,当栈中代码执行完毕后,再将队列中的事件放到执行栈中依次执行。
复杂数据类型(Object、[数组、对象])创建的时候 开辟的 堆内存
基本数据类型(number、string等6种)创建的时候 开辟的 栈内容
var str=new String('abc');
var str='abc';
同样是创建两个字符串,第一种是用new关键字来新建String对象,对象会存放在堆中,每调用一次就会创建一个新的对象;
而第二种是在栈中,栈中存放值‘abc’和对值的引用。推荐使用第二种方式创建多个’abc’字符串,这种写法在内存中只存在一个值,有利于节省内存空间。
同时它可以在一定程度上提高程序的运行速度,因为存储在栈中,其值可以共享,并且由于栈访问更快,所以对于性能的提高大有裨益。
而第一种方式每次都在堆中创建一个新的String对象,而不管其字符串值是否相等及是否有必要创建新对象,从而加重了程序的负担。并且堆的访问速度慢,对程序性能的影响也大。
另外,出于逻辑运算的考虑,当对两个变量进行比较时,使用堆和栈存储就会有差异
var str1='abc';
var str2='abc';
alert(str1==str2); // true
alert(str1===str2); // true
不管是逻辑等于和逻辑全等运算都返回true,可以看出str1和str2指向同一个值。
var str1=new String('abc');
var str2=new String('abc');
alert(str1==str2); // false
alert(str1===str2); // false
不管是逻辑等于还是逻辑全等都返回false,可以看出str1和str2指向的不是同一个对象。
var str1=new String('abc');
var str2='abc';
alert(str1==str2); // true
alert(str1===str2); // false
在进行逻辑等于和逻辑全等运算时,会首先将变量转成相同的数据类型,然后进行对比。变量str1和str2的数据类型虽然不同,但比较运算还是返回true。但逻辑全等运算与逻辑等于运算不同,它会对数据类型进行比较,看是否是引用的同一个数据。
总结
栈内存是有限度的可以自动释放,堆内存无限不会自动释放,运行程序的时候,每个线程分配一个栈,每个进程分配一个堆
栈存放基本类型的变量、函数、对象变量指针,堆存放对象
放在栈里面的变量,只要值一样就可以全等,栈占内存较小,会自动释放值,值为null,放在堆里面的变量,值相等(应为会默认转成相同数据类型进行对比),全等=会比较是否引用一个数据故不等,不会自动释放值
栈中数据可以共享,若是两个变量值一样,可以一起指向那个值
前端js堆栈的更多相关文章
- 前端Js框架汇总
概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领域心花路放,也是煞是羡慕.寻了寻.net的消息,也是振奋人心,.net co ...
- 闲聊——浅谈前端js模块化演变
function时代 前端这几年发展太快了,我学习的速度都跟不上演变的速度了(门派太多了,后台都是大牛公司支撑类似于facebook的react.google的angular,angular的1.0还 ...
- json处理总结(前端js和后端java)
前端(js): json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键,下面将介绍两者之间的相互转换. json字符串:var st ...
- 前端js文件合并三种方式
最近在思考前端js文件该如何合并,当然不包括不能合并文件,而是我们能合并的文件,想了想应该也只有三种方式. 三个方式如下: 1. 一个大文件,所有js合并成一个大文件,所有页面都引用它. 2. 各个页 ...
- 2015 前端[JS]工程师必知必会
2015 前端[JS]工程师必知必会 本文摘自:http://zhuanlan.zhihu.com/FrontendMagazine/20002850 ,因为好东东西暂时没看懂,所以暂时保留下来,供以 ...
- RSA加密前端JS加密,后端asp.net解密,报异常
RSA加密前端JS加密,后端asp.net解密,报异常 参考引用:http://www.ohdave.com/rsa/的JS加密库 前端JS加密代码: function GetChangeStr() ...
- 前端js的书写规范和高效维护的方案_自我总结使用的方案
作为程序员,人生最值得幸福的事有几件: 解决困扰了很长时间的问题 升职加薪 找个漂亮又靠谱的对象 深得领导的喜欢 带领团队冲锋陷阵 ... 哈哈,这些都是梦想,暂时想想就好了.这肯定和我说的东西不符合 ...
- 前端js,css文件合并三种方式,bat命令
前端js,css文件合并三种方式,bat命令 前端js文件该如何合并三个方式如下:1. 一个大文件,所有js合并成一个大文件,所有页面都引用它.2. 各个页面大文件,各自页面合并生成自己所需js的大文 ...
- 前端js上传文件 到后端接收文件
下面是前端js代码: <html> <head> <meta http-equiv="Content-Type" content="text ...
随机推荐
- 《深入理解ES6》笔记——块级作用域绑定(1)
本章涉及3个知识点,var.let.const,现在让我们了解3个关键字的特性和使用方法. var JavaScript中,我们通常说的作用域是函数作用域,使用var声明的变量,无论是在代码的哪个地方 ...
- 前端网络安全——Cookies
一.Cookies特性 1.前端数据存储 2.后端通过http头设置 3.请求时通过http头传给后端 4.前端可读写 5.遵守同源策略 二.Cookies内容 1.域名 2.有效期,删除cookie ...
- linux安装mongodb磁盘空间不足
Insufficient free space for journal filesPlease make at least 3379MB available in /export/servers/mo ...
- mysql基本操作2
##DDL控制表结构,不支持事务##DML控制表数据,支持事务 DQL专门做查询 ##TCL 管理事务##DCL 管理数据库权限 ##ORDER BY 子句-根据指定列对结果集 ...
- Python使用函数模拟“汉诺塔”过程
运行效果: 源代码: 1 # -*- coding:utf-8 -*- 2 ##汉诺塔游戏开始 3 _times=0 #用于统计移动次数 4 def hannuota(nlist,mfrom,mpas ...
- XStream使用记录
XStream使用记录 官网 http://x-stream.github.io/index.html 下载地址 http://x-stream.github.io/download.html 参考资 ...
- git远程建立仓库后,将本地项目推到远程报错 fatal: refusing to merge unrelated histories
出现这个问题的最主要原因还是在于本地仓库和远程仓库实际上是独立的两个仓库,假如之前是直接clone的方式在本地仓库就不会有这个问题了. 解决方式是在命令后紧跟 --allow-unrelated-hi ...
- java实现sftp文件上传下载
/** * * @param filePath 文件全路径 * @param ftpPath 上传到目的端目录 * @param username * @param password * @param ...
- 开始项目之前整理Xmind
今天为将要做的项目整理了一份Xmind文档,每个页面,模块,功能都记了下来.带我的老师说过于详细了,但我还是新手,也不懂哪里改精简那里不该. 总结:整理Xmind文档还是很有必要的,之前这个项目我大致 ...
- 【报错解决】Uncaught TypeError: Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'.
项目开发日记-bug多多篇(2) 同时也是 实现一些功能(3) 真的痛苦,写一天代码遇到的bug够我写三天博客. 今天是为了做一个头像功能,具体说是用户上传头像文件并且预览的功能. <div c ...