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