美文网首页
JS内存释放

JS内存释放

作者: 空压机百科 | 来源:发表于2019-11-20 00:28 被阅读0次
堆内存

对象数据类型或者函数数据类型在定义的时候会开辟一个堆内存,堆内存有一个引用地址,如果外面变量知道了这个地址,我们就说这个内存被占用了,就不能销毁。
堆内存释放 / 销毁:只需要把所有引用它的变量赋值赋值为null即可,如果当前的堆内存没有任何东西被占用了,那么浏览器会在空闲的时候把它销毁。

栈内存

1、全局作用域:只有当页面关闭的时候全局作用域才会销毁。
2、基于ES6中的let / const形成的块作用域也是栈内存
3、私有作用域(只有函数执行会产生私有的作用域):
一般情况下,函数执行会形成一个新的私有作用域,当私有作用域中的代码执行完成后,我们当前作用域都会主动的进行释放和销毁。
但是存在特殊情况下当前私有作用域中的部分内存被作用域以外的东西占用了,那么当前的这个作用域就不能销毁。
a、函数执行返回了一个引用数据类型的值,并且在函数的外面被一个其他的东西给接受了,这种情况下一般形成的私有作用域都不会销毁。案例图:

var num = 12;
function fn(){
   var num = 120;
   return function(){
      console.log(num)
   }
}
var f = fn();
f();

解释:作用域A里面的堆内存 xxxfff111 被作用域A以外的 f 占用了,那么堆内存 xxxfff111 堆内存不能释放,对应的作用域A这个私有的作用域也不能销毁。>>里面的私有变量 num 也不能销毁了。
b、在一个私有作用域中给 DOM 元素的事件绑定方法,一般情况下我们的私有作用域都不销毁。案例图:

var div1 = document.getElementById("div1")
!function (){
   div1.onclick = function(){
      
   }
}.call()

解释:通过 DOM 方法获取的元素 / 元素集合都是对象数据类型的值。
c、下述情况属于不立即销毁,fn 返回函数没有被其他的东西占用,但是还需要执行一次,所以暂时不销毁,当返回的值执行完成后,浏览器会在空闲的时候把他销毁了。案例:

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

内存销毁案例1:

function fn(){
    var i = 10
    return function(n){
        console.log(n + (++i))
    }
}
var f = fn()
f(10)
f(20)
fn()(10)
fn()(20)

内存销毁案例2:

function fn(i){
    return function(n){
        console.log(n + i++)
    }
}
var f = fn(13)
f(12)  // == 25
f(14)  // == 28
fn(15)(12)  // == 27
fn(16)(13)  // == 29

相关文章

  • JS内存释放

    堆内存 对象数据类型或者函数数据类型在定义的时候会开辟一个堆内存,堆内存有一个引用地址,如果外面变量知道了这个地址...

  • JS垃圾回收机制

    JS的内存生命周期: 分配你所需要的内存 使用分配到的内存(读、写) 不需要时将其释放、归还 js垃圾回收机制: ...

  • js : 棧内存+堆内存+内存释放

    棧内存和堆内存 棧内存:提供了一个供JS代码执行的环境全局作用域私有所拥域 堆内存:存储引用数据类型的数据函数数据...

  • JavaScript内存管理

    JS内存回收 JS 有自动垃圾回收机制,就是找出那些不再继续使用的值,然后释放其占用的内存。 垃圾回收算法: 引用...

  • 2019年前端面试题-02

    JS哪些操作会造成内存泄露 JS的回收机制: 找出不再使用的变量,然后释放掉其占用的内存,但是这个过程不是实时的,...

  • 使用WKWebView注意内存释放

    往WKWebView内注入JS方法时,出现内存无法释放问题 先说说wkWebView与JS交互的方法吧 WKWeb...

  • JS引擎之内存管理

    内存的生命周期 分配你所需要的内存 使用分配到的内存(读、写) 不需要时将其释放\归还 内存空间 JS内存空间分为...

  • JS垃圾回收机制

    JS的内存生命周期: 1、分配你所需要的内存 2、使用分配到的内存(读、写) 3、不需要时将其释放、归还 var ...

  • WKWebView内存泄漏

    WKWebView加载网页 当WKWebView与js交互时,会发生内存泄漏,造成webview无法释放。这可能造...

  • three.js内存释放问题

    问题描述 在使用three.js渲染3D模型时,经常性的会遇到在连续添加模型后,导致浏览器崩溃的问题,经过排查,发...

网友评论

      本文标题:JS内存释放

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