为了账号安全,请及时绑定邮箱和手机立即绑定

一个有关javascript垃圾回收机制的问题

一个有关javascript垃圾回收机制的问题

MMTTMM 2019-02-04 21:18:41
function fn1(){    var a=10    var b=20    var c=30    function fn2(){        alert(a++)    }    return fn2}var fn3=fn1()fn3()fn3()以上代码,形成了闭包,垃圾回收机制不会回收a变量,但是没有用到的b,c两个变量会被垃圾回收机制回收吗?
查看完整描述

1 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

未被闭包引用的变量将被回收,可以用console.dir()打印出函数的属性,来查看它[[scope]]:


function fn1(){

    var a=10

    var b=20

    var c=30

    function fn2(){

        alert(a++)

    }

    return fn2

}

console.dir(fn1())

将会得到 fn1 只保留了变量a,变量bc被回收了。


[[Scopes]]: Scopes[2]

    0: Closure (fn1)

        a: 10

    1: Global

如果再添加一个闭包:


var fn4 

function fn1(){

    var a=10

    var b=20

    var c=30

    function fn2(){

        alert(a++)

    }

    fn4 = function () {

        alert(b++)

    }

    return fn2

}

console.dir(fn1())

console.dir(fn4)

可以看到,变量a、b被闭包引用,没有被回收,只有c被回收了


[[Scopes]]: Scopes[2]

    0: Closure (fn1)

        a: 10

        b: 20

    1: Global


查看完整回答
反对 回复 2019-02-13
  • 1 回答
  • 0 关注
  • 379 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信