美文网首页WEB前端程序开发Web前端之路
关于js的内存的释放和作用域的销毁

关于js的内存的释放和作用域的销毁

作者: 独立行走的蚂蚁 | 来源:发表于2018-04-18 16:42 被阅读11次

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

var obj = {name: 'ant', age: '5'};
var obj1 = obj;
这时候如果我们要把内存释放或者销毁,只需要把所有的引用它的变量赋值为null即可,如果当前内存没有被任何东西占用,浏览器也会在空闲的时候把它给销毁
obj = null;
obj1 = null

2.栈内存
(1)全局作用域
只有当页面关闭的时候全局作用域才会销毁
(2)私有作用域(只有函数执行才会产生私有作用域)

2.1一般情况下,函数执行会形成一个新的私有的作用域,当私有作用域中的代码执行完成后,我们当前作用域都会主动进行释放和销毁。
2.2但是还是有特殊情况,如果当前作用域中的部分内存被作用域以外的东西占用了,那么当前这个作用域就不会销毁

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

function fn () {
  var num = 10;
  return function () {
    var num = 20;
    console.log(num)
  }
}
var fn1 = fn ()  //  这时候fn执行完成的这个私有的作用域就不能再销毁了

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

    var oDiv = document.getElementById('div1');
    !function () {
        oDiv.onclick = function () {}
      }();   // 当前函数形成的私有作用域也不能销毁

2.2.3下面这种情况不立即销毁,fn返回的函数没有被其他函数占用,但是还是需要执行一次,所以暂时不销毁,当返回的值执行完成后,浏览器会在空闲的时候把它销毁。

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

相关文章

  • 关于js的内存的释放和作用域的销毁

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

  • JS-NO.8

    内存释放: 栈内存的形成和释放: 全局作用域: 形成:当浏览器加载完页面的时候,全局作用域形成 销毁:关闭页面,关...

  • 内存释放和作用域销毁

    //每一次函数执行都会开辟一个新的内存空间,供代码执行(局部作用域) //堆内存释放 var obj1={"你好"...

  • 03、内存释放和作用域销毁

    堆内存 对象数据类型或者函数数据类型在定义的时候首先都会开辟一个堆内存,堆内存有一个引用的地址,如果外边有变量引用...

  • 内存释放(堆内存)和作用域(栈内存)销毁

    内存释放(堆内存)和作用域(栈内存)销毁对象数据类型或者函数数据类型在定义的时候会首先开辟一个堆内存// 堆内存的...

  • 06-内存释放和作用域销毁

  • 内存释放与作用域链销毁

    内存释放 1.堆内存 对象数据类型或函数数据类型在定义的时候都会先开辟一个堆内存,堆内存有一个引用的地址,如果外面...

  • 作用域的整理

    作用域 全局作用域 1、直接写在js的代码中,都在全局作用域 2、全局作用域在页面打开时创建,在页面关闭时销毁。 ...

  • 作用域与this

    作用域与 this 一、作用域 1.1 JS 中的内存空间分为两种: 栈内存:提供 js 代码的执行环境;存储基本...

  • 前端开发性能优化方法

    前端开发性能优化方案 在js中尽量减少闭包的使用(闭包会产生不销毁的作用域不销毁的栈内存)循环给元素做事件绑定的时...

网友评论

    本文标题:关于js的内存的释放和作用域的销毁

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