猿问

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

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两个变量会被垃圾回收机制回收吗?

MMTTMM
浏览 380回答 1
1回答

手掌心

未被闭包引用的变量将被回收,可以用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
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答