function a(){ return function b(){......}}
var a1=a();
var re=a1();
a1=null;//书上说,这里解除对匿名函数的引用,以便释放内存.但是在var re=a1();这一步,匿名函数执行完后,不是已经可以释放作用域链,a和b变量对象么?为什么还要最后置空呢??请指教!~谢谢~~

解决方案 »

  1.   

    但是在var re=a1();这一步,匿名函数执行完后,不是已经可以释放作用域链
    如果该推论正确,在后面再调用a1()试试,如果没有异常,a1 = null还是有必要的.
      

  2.   

    function a(){ return function b(){......}}
    var a1=a();
    var re=a1();
    a1=null;//书上说,这里解除对匿名函数的引用,以便释放内存.这里a1存放的是函数b的句柄
    re存放的是函数b执行完后返回的东西把a1清空就是把b的函数句柄清掉
      

  3.   

    由于a1引用了b函数,所以,即使是a函数执行完毕也不会被释放内存,为的是保存b函数的执行环境。
    当把a1设置成null之后,就没有对b函数的引用了,过一会,垃圾收集器会将没有被引用的b函数回收,同时a函数也没有必要为b保存执行环境了,所以被收集走了。内存就被释放了。
    可能是这样吧