日期:2014-05-16  浏览次数:20306 次

关于javascript对象的一个问题( 关于变量的生存周期 )
假设有如下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>