美文网首页
内存释放与作用域销毁(个人学习笔记)

内存释放与作用域销毁(个人学习笔记)

作者: 大哈QAQ | 来源:发表于2018-10-01 09:35 被阅读0次

    堆内存释放:

            1、对象数据类型或者函数数据类型在定义的时候都会开辟一个堆内存,堆内存内有一个引用地址,如果地址被变量引用了,那么相应的内存就被占有,就不能释放了。

            2、通过将变量赋值为null(空对象指针)或其他非引用类型,那么之前定义的对象或函数就没被占用,那么浏览器就会在空余的时候释放内存。

    栈内存释放:

            1、栈内存包括了全局作用域和函数作用域

                  (1)全局作用域在浏览器加载页面的时候产生,在浏览器关闭时全局作用域栈内存被释放。

                  (2)函数在执行时产生一个私有作用域,函数在预编译和执行完毕后,一般会销毁作用域,释放栈内存;但存在特殊的情况:当前作用域的部分内存被作用域以外的变量所占用,那么当前的作用域就不会被销毁。

                      (a)函数执行返回一个引用数据类型的值,并且值被函数外的变量接收,这种情况下私有作用域一般不会被销毁。

                      (b)函数返回一个函数紧接着被调用,这时函数作用域“不会立即销毁”,如图:

    不会立即销毁

                       (c)通过DOM方法获得的元素或元素集都是对象数据类型,通过给元素绑定事件函数,事件函数的父级私有作用域不会被销毁。

                     (d)形成闭包:1、函数执行返回一个函数,并且值被函数外的变量接收,这时返回的函数的作用域链不销毁,内部函数拥有访问父级函数的权限,可以使用父级的作用域的变量,这时就形成了闭包,这是函数模式的闭包;2、函数内定义的函数没被返回,当内部函数使用了父级的变量也会形成闭包(可以在控制台查看闭包信息);3、函数内定义的对象被返回,且对象使用了函数作用域的变量,这样也形成闭包,这被称为对象模式的闭包。

                          闭包副作用:闭包会造成原有作用域链不释放,造成内存泄露。

                          闭包作用:如图

    闭包作用

    相关文章

      网友评论

          本文标题:内存释放与作用域销毁(个人学习笔记)

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