假设有如下javaScript代码:
//Point A:
function f(arg){
this.property = arg;
}
var a = new f(1);
//Point B:
我想知道的是:当程序运行到Point B的时候, a对象中的变量arg是否还存在,或是已被销毁?
( 请真正了解原理的朋友回答,如果你对自己的答案不是很有把握,请不要回答 )
------解决方案--------------------
为了直观体验,利用VBS对象析构的功能,来提示是否释放,只能在IE 下测试
你可以修改 f 里的代码进行测试
<title>测试GC</title>
<script language="vbs">
Class C
public property get value
value="ok"
end property
Private Sub Class_Terminate
MsgBox("释放了")
End Sub
End Class
function vbObj()
set vbObj= new C
end function
</script>
<button onclick="test()">创建对象</button>
<button onclick="javascript:a=null">主动释放</button>
<script>
var a;
function f(arg){
this.xx=function(){ alert( arg.value ) } //如果这里有引用 不会马上会释放
// this.yy=function(){ alert( eval('1+2') ) } //有eval 的也不会马上释放
//this.zz=function(){} //会马上释放
}
function test(){
var o=vbObj();
a=new f(o);
}
setInterval(CollectGarbage, 500);
</script>