JS学习总结3(JS内存空间)

在说prototype原型之前,先理解下JS的内存空间。
JS具有自动垃圾回收机制,所以对前端开发人员来讲,内存空间并不常被提及,容易被忽略。但是理解了JS内存空间,会更好的理解掌握prototype原型、闭包等知识。

一、变量对象与内存空间

值类型数据(string,number,boolean,undefined,null)都是按值访问,我们可以直接操作保存在变量中的实际的值。
引用类型数据都是按引用访问的,引用数据类型的值是保存在堆内存中的对象。JS不允许直接访问堆内存中的位置,因此我们不能直接操作对象的堆内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。
看下面代码:

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] 作为对象存在于堆内存中

上述代码所对应的内存空间如下图所示:
内存空间

二、垃圾回收

JavaScript具有自动垃圾收集机制,所以内存的分配与回收都完全实现了自动管理。

在局部作用域中,当函数执行完毕,局部变量也就没有存在的必要了,因此垃圾收集器很容易做出判断并回收。但是全局变量什么时候需要自动释放内存空间则很难判断,因此在我们的开发中,需要尽量避免使用全局变量。

适当的将不再用的引用赋值为null,那么垃圾收集器会在下一次执行操作时找到该变量并释放内存。从而优化代码性能。

var a = 20;  // 在内存中给数值变量分配空间
console.log(a);  // 使用内存
a = null; // 使用完毕之后,释放内存空间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值