js中的垃圾回收机制和闭包特性

本文介绍了JavaScript中的垃圾回收机制,包括标记清理和引用计数两种策略。通过自动内存管理,JavaScript确定不再使用的变量并释放其内存。标记清理通过标记进入和离开环境的变量来回收资源,而引用计数则跟踪引用次数,循环引用是其挑战。文章还通过例子展示了垃圾回收如何影响函数作用域,特别是闭包特性,使得变量在特定情况下不会被回收。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

js中的垃圾回收机制是通过自动内存管理实现内存分配和闲置资源回收;

基本思路:确定哪个变量不会再使用,然后释放它占用的内存;

垃圾回收程序必须跟踪记录哪个变量还会使用,以及哪个变量不在使用,以便回收内存;

标记策略:标记清理(常用)和引用计数;

标记清理:

function test1(){
    // 垃圾回收机制使用的是标记清除的方法
    var a = 1;
    // 此时的标记进入环境
 }
test1();
// 执行完之后,变量a被标记为离开环境

引用计数:

// 根据记录每一个引用值被使用的次数,来做清理,如果是0就清除,不是就不会被清理
// 在老版的ie浏览器中就是使用这种引用计数的垃圾回收机制 
function test(){
    var a = new Object(); // 引用值赋给变量的时候他的引用值次数默认为1
    var b = new Object();

    a.prop = b; // 此时的b的引用次数是2
    b.prop = a; // a的引用次数也是2
    // 这里构成了一种循环引用的方式
    // 在低版本的ie中当你不想在使用这个值的时候,需要手动解除引用
    a = null;
    b = null;
 }

垃圾回收机制的例子:

function test1(){
    var a = 1;
    function test2(){
        a++;
        console.log(a);
  }
    test2(); // 在这里调用完test2之后变量a就不存在了
 }
    test1(); // 2
    test1(); // 2 之后每次调用test1时输出的只会是2

有一个特例就是“闭包”特性:

function test1(){
    var a = 1;
    return function(){
        a++;
        console.log(a);
  }
 }

var test = test1();
test(); // 2
test(); // 3
test(); // 4
test(); // 5

闭包的三个特性:

1、函数嵌套函数

2、函数内部可以引用函数外部的参数和变量

3、参数和变量不会被垃圾回收机制回收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值