前端面试部分整理

1. 闭包原理和使用,js垃圾回收机制

	for( var i = 0; i <3; i++){
       (function(i){
           setTimeout(function(){
               console.log(i)
           }, 1000*i)
       })(i)
    }
	// 0,1,2秒之后打印 0,1,2
	function fn(){
        var a = 3
        return function(){
            console.log(a++)                                    
        }
    }
    fn()() // 3
    fn()() // 3
    var fn_n = fn()
    fn_n() // 3
    fn_n() // 4

每次外部函数执行的时 候,外部函数的引用地址不同,都会重新创建一个新的地址,key = value,key 被删除了 value 常驻内存中,所以fn_n找到了fn函数中变量的最终值。
关于垃圾回收机制先讲两种,标记清除、引用计数、标记压缩。

标记清除
  • GC roots 根集,一组必须活跃的引用
  • Tracing GC 回收器扫描是从GC roots触出发,有引用关系能被遍历到的对象称为可达对象,判定存活其余则判定死亡

从根集出发,将根集引用的对象Obj放入Unscanned未扫描集中并通过对象header属性写入reached可达标志标识为1,Obj从Unscanned中释放,将Obj引用的对象再放入Unscanned,最后所有可达对象标识为1,进入清扫阶段,
reached为0的对象放入Free释放集合等待回收。回收之后存活的对象 reached 标志位归还位0,进行下一轮。

引用计数

对象新增了一个引用,引用计数+1,引用释放时引用计数-1,无法解决循环引用的问题。

标记压缩

与标记清除法类似,清除阶段会将上一轮存活对象压缩到内存的一端,之后清理边界,可以减少内存碎片,避免分配大对象时空间不够。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值