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
添加回答
举报
0/150
提交
取消