c变量到底是自己没销毁呢,还是被复制到闭包中保存了一份?
如果是前者,为何alert(c)显示未定义?
<script type="text/javascript">
function a(b){
var c=30;
setTimeout(m,1000);
function m(  ){
alert(c);
}
}
a(2);
alert(c);
  </script>

解决方案 »

  1.   

    c保存在variable environment。这属于内部机制了,不是一两句话能给你讲明白的。
      

  2.   

    c是a函数的私有属性,你在外面alert个什么劲。。2楼说得跟真的一样,别误导新人好不。。
      

  3.   

    你的最后一句话 alert不到c 因为不存在全局的c
      

  4.   

    JS的垃圾回收机制是回收没被引用的对象,所以C在
    setTimeout(m,1000);
    function m( ){
    alert(c);
    }
    中被引用了,所以没有被销毁。。
    而外面的a函数外面alert(c)是因为,当前作用域中访问不到c变量,,所以显示未定义