JavaScript内存生命周期和内存分配
一、JavaScript内存管理概述
像C语言、c++这样的底层语言一般都有底层的内存管理接口,比如 malloc()和free()。
相反,JavaScript是在创建变量(对象,字符串等)时自动进行了分配内存,并且在不使用它们时"自动"释放。 释放的过程称为垃圾回收。这个"自动"是混乱的根源,并让JavaScript(和其他高级语言)开发者错误的感觉他们可以不关心内存管理。 二、内存生命周期
不管什么程序语言,内存生命周期基本是一致的:
1. 分配你所需要的内存
2. 使用分配到的内存读 / 写
3. 不需要时将其释放 / 归还
所有语言第二部分都是明确的。第一和第三部分在底层语言中是明确的,但在像JavaScript这些高级语言中,大部分都是隐含的。 三、JavaScript 的内存分配1、值的初始化
为了不让程序员费心分配内存,JavaScript 在定义变量时就完成了内存分配。 var n = 123; // 给数值变量分配内存 var s = "azerty"; // 给字符串分配内存 var o = { a: 1, b: null }; // 给对象及其包含的值分配内存 // 给数组及其包含的值分配内存(就像对象一样) var a = [1, null, "abra"]; function f(a){ return a + 2; } // 给函数(可调用的对象)分配内存 // 函数表达式也能分配一个对象 someElement.addEventListener("click", function(){ someElement.style.backgroundColor = "blue"; }, false); //addEventListener第二个参数一般设置为false2、通过函数调用分配内存
有些函数调用结果是分配对象内存:
var d = new Date(); // 分配一个 Date 对象
var e = document.createElement("p"); // 分配一个 DOM 元素
有些方法分配新变量或者新对象:
var s = "azerty";
var s2 = s.substr(0, 3); // s2 是一个新的字符串// 因为字符串是不变量,// JavaScript 可能决定不分配内存,// 只是存储了 [0-3] 的范围。
var a = ["ouais ouais", "nan nan"];
var a2 = ["generation", "nan nan"];
var a3 = a.concat(a2); // 新数组有四个元素,是 a 连接 a2 的结果 3、使用值
使用值的过程实际上是对分配内存进行读取与写入的操作。读取与写入可能是写入一个变量或者一个对象的属性值,甚至传递函数的参数。 当内存不再需要使用时释放
大多数内存管理的问题都在这个阶段。在这里最艰难的任务是找到" 哪些被分配的内存确实已经不再需要了 "。它往往要求开发人员来确定在程序中哪一块内存不再需要并且释放它。
高级语言解释器嵌入了"垃圾回收器",它的主要工作是跟踪内存的分配和使用,以便当分配的内存不再使用时,自动释放它。这只能是一个近似的过程,因为要知道是否仍然需要某块内存是无法判定的(无法通过某种算法解决)。
本文是全新前端教程里的课件文档,如需完整课程资源请私信鄙人。
2021年第二季度邮件安全趋势企业是重灾区新网企业邮箱资讯第二季度全球疫情因病毒变种的关系,让原本解封状态的许多地区又拉起了警报,开始了远程工作或在家上班。相比第一季度,邮件安全问题层出不穷,钓鱼邮件季环比增长21。27,
为什么我的企业邮箱总是发送失败?新网企业邮箱资讯相信你一定有过类似的经历一个陌生号码给你打来电话,虽然是陌生号码,但是你的手机上却显示房产中介保险理财,甚至是诈骗团伙这样的提示信息。这是因为这个陌生号码被列入了一
域名也能司法拍卖?域名已成为重要的无形资产新网域名资讯7月27日,一名老赖名下的网络域名被市南法院以50190元的价格成功拍卖。原告之子受雇于被告,在带领两名游客潜水时不幸溺水身亡。经判决,被告应赔偿死亡赔偿金丧葬费丧葬人
云环境下,如何对网络数据进行采集?新网云资讯从传统环境到云环境,数据采集的难度大幅上升。过去,网络流量跑在物理网络服务器等传统设备间,只需要通过TAP或者物理交换机镜像的方式就能进行流量采集现在,流量开始跑向云端,
上市公司域名kintera。org掉落,被19。5万抢注新网域名资讯据外媒报道,域名kintera。org于最近掉落,最终以30,250美元(约合人民币19。5万)的价格重新注册。据了解,域名Kintera。org此前是被一家软件服务公
云数据库Redis是单线程的,为什么会产生线程问题?新网云资讯Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库缓存服务或消息服务使用。Redis支持多种数据结构,包括字符串哈希表链表集合有序集合位图Hyperlo
2021年公开的第二大域名交易Marketing。com新网域名资讯近日,单词域名Marketing。com以250万美元(折合人民币约1620元)的价格易主。根据今年年度交易排行榜的数据来看,暂时可以排在第二的位置,仅次于在今年初以3
网站没有SSL证书,到底影响什么?新网建站资讯SSL证书其实是网络世界中的身份证,拥有这张证就有权在网络世界中证明你是一个真实可信的企业或个人网站,而不是一个钓鱼网站。企业通过安装证书来激活浏览器到服务器之间的加密
MacBook为何不断重启?如何解决?您的Mac是否突然无故重启?您外出回来时,突然发现您的Mac正在神秘地关闭并重新启动,这非常令人生气。如果重新启动问题变得更加严重,您的MacBook可能根本无法使用。小编将为您带
翻新iPad可以购买吗?要注意哪些问题近年来,Apple的平板电脑阵容急剧增长,最新阵容包括新款M1iPadPro和2020年的10。2英寸iPad(第8代)和iPadAir(第4代)。有了这么多的选择,苹果平板电脑的
国别域名发展史新网域名科普在交易市场中,国别域名作为一个独特的存在,常常被看做是一个国家的代表,像提起中国的互联网,人们就会想到。cn,提起德国的互联网,人们就会想起。de。国别域名发展至今,已