js

js的闭包,js的垃圾回收机制。

解决方案 »

  1.   

    其实,应该这样理解,
    1.比如你有一个函数 var a = [1,2,3];
       var b = 2;
       function fn(){
          var b= 10;
          console.log(a);
          console.log(b)
       }
    在这个代码里面,我们可以看到  在全局定义了一个变量为a 也就是在栈里面定了了一个a变量 他有一个内存地址指向与堆里面的[1,2,3],
    这个时候 当你调用了fn(),这时 堆里面的fn函数会开辟一块临时的内存空间,里面也在临时的内存空间里面的栈中创建了一个变量b,我们在这片临时的内存空间中输出a,它这片区域是没有的,只能向外部查找,结果,找到全局的a的内存地址就会输出相应的值,也就是[1,2,3], 输出b,这时候临时内存空间里面有一个b变量,就会输出b,js里面有一个就近原则,所以此时输出的是10;,
    2.当你调用完fn后,临时的内存空间与外界毫无关联,也就是不输出a这个过程,那么调用完fn这个函数,这片临时的内存空间就会被释放,反之,就相当于临时空间指向于全局的一个内存地址,这时候相当于闭包的产生,得不到释放.大概就是这么一个过程
      

  2.   


    你给的例子一般在code review的时候就被打回去重写了。全局变量 类成员变量 临时变量 命名规则定义好, 一般就不会出来这些问题了。