zoukankan      html  css  js  c++  java
  • JavaScript基础知识六(内存释放、作用域销毁)

    1.堆内存

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

    我们想要让堆内存释放/销毁,只要把所有引用它的变量赋值为null即可,如果当前的堆内存没有任何东西被占用了,那么浏览器会在空闲的时候把它销毁...

    2.栈内存

    1)全局作用域

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

    2)私有作用域(只有函数执行会产生私有的作用域)

    一般情况下,函数执行会形成一个新的私有作用域,当私有作用域中的代码中下完成后,我们当前作用域都会主动的进行释放和销毁

    但是还是存在特殊的情况:

     当前私有作用域中的部分内存被作用域 意外的 东西占用了,那么当前的这个作用域就不能销毁了

      a.函数执行返回了一个引用数据类型的值并且在函数的外面被一个其他的东西给接收了,这种情况下一般,这种情况下一般形成的私有作用域都不会被销毁

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

    b.在一个私有的作用域中给DOM元素的事件绑定方法,一般情况下我们的私有作用域都不销毁

    var oDiv = document.getElementById("div1");
    
    ~function(){
    
        oDiv.onclick  = function (){
    
    
       } 
    }();//当前自执行函数形成的这个私有的作用域也不销毁

    c.  

    function fn(){
    var num = 100;
    return function(){
    
     }
    }  
    fn()();//首先执行fn,返回一个小函数对应的内存地址,然后紧接着让返回的小函数再执行,不立即销毁
  • 相关阅读:
    Nginx编译参数详细注释(解释)(转载)
    linux 下开机同步时间
    115转存代码
    清除linux下history命令
    【python学习1】编写猜数字的小游戏
    对深层嵌套的代码进行重构
    JS对JSON的操作总结
    调程序的小女孩(感谢安徒生)(转)
    区块链资料
    aws创建实例 通过密钥登录后 更改root账号密码 创建普通账户 开放ssh密码登录 关闭root账号登录
  • 原文地址:https://www.cnblogs.com/zzzzzzzsy/p/6678139.html
Copyright © 2011-2022 走看看