JavaScript基础知识六(内存释放作用域销毁)

Posted 且听风吟V

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,返回一个小函数对应的内存地址,然后紧接着让返回的小函数再执行,不立即销毁

 

以上是关于JavaScript基础知识六(内存释放作用域销毁)的主要内容,如果未能解决你的问题,请参考以下文章

js的内存释放初步理解

js之堆栈内存基础

作用域知识总结

js作用域的销毁不立即销毁不销毁

JavaScript基础 作用域 this 原型

JavaScript栈和堆内存,作用域