美文网首页
内存释放与作用域链销毁

内存释放与作用域链销毁

作者: gaoqizhuhui | 来源:发表于2017-07-21 20:29 被阅读0次

    内存释放

    1.堆内存

    对象数据类型或函数数据类型在定义的时候都会先开辟一个堆内存,堆内存有一个引用的地址,如果外面有变量知道了这个地址,就说这个内存被占用了,不能销毁了。

    若想让堆内存释放/销毁,只需把所有引用它的变量值赋值为null即可,如果当前的堆内存没有任何东西被占用了,那么浏览器会在空闲时间把它销毁(各浏览器如何销毁,具体学习看《JS高级程序设计》)

    2.桟内存

    全局作用域:只有当页面关闭的时候全局作用域才会销毁。

    私有作用域(只有函数执行会产生私有作用域,if、for、switch等是代码块不是私有作用域):一般情况下,函数执行会形成一个新的私有作用域,当私有作用域中的代码执行完成后,我们当前作用域都会主动的进行释放和销毁。特殊情况:当前私有作用域中的部分内存被作用域以外的东西占用了,那么当前的这个作用域就不能销毁了,有以下一些情况不销毁:
    eg:a.函数执行返回了一个引用数据类型的值,并在函数的外面被一个其他东西给接收了,这种情况下一般形成的私有作用域都不会销毁

    function fn(){
         var num=100;
         return function(){ };
    }
    var f=fn(); //fn执行形成的这个私有作用域就不能再销毁了
    

    b、在一个私有作用域中给DOM元素的事件绑定方法,一般情况下,我们的私有作用域不销毁(原理同a)

    c、不立即销毁:fn返回的函数没有被其他东西占用,但还需执行一次,所以暂时不销毁,当返回的值执行完成后,浏览器会在空闲时候把它销毁了。

    function fn(){
         var num=100;
         return function(){ };
    }
    fn()();  //首先执行fn,返回一个小函数对应的内存地址,然后紧接着让返回的小函数再执行
    

    相关文章

      网友评论

          本文标题:内存释放与作用域链销毁

          本文链接:https://www.haomeiwen.com/subject/lwaekxtx.html