美文网首页
内存泄漏

内存泄漏

作者: 多年0以后 | 来源:发表于2021-04-29 12:18 被阅读0次

    闭包

    • 在闭包中,内部函数引用外部函数变量,实际上是应用了外部函数的作用域(scope)对象
    • 如果作用域对象所在函数还是一个闭包,将形成一个很长的引用链,占用大量内存
    • 其中有很大一部分内存的占用是不必要的,因为除了闭包以外没有其他引用指向链条中的绝大部分对象
    • 所以在程序里尽量减少使用闭包,使用完毕要手动释放闭包函数对象

    全局变量

    • 在javascript中定义全局变量,实际上是以全局对象的属性保存的
    • 而全局对象永远不会被gc,如果大量定义全局变量则会造成内存泄漏

    dom事件绑定

    • 在获取dom为其绑定事件监听以后,如果后续从页面上移除了此dom则会造成内存泄漏
    • 是由于事件监听回调函数与dom对象的循环引用导致的两者在dom被移除后都无法被正常gc
    • 在事件回调函数中如果没有引用dom对象则不会造成循环引用
    • 但是通常情况下我们在回调函数中都会用到dom对象,即使没有显式的使用
    • 如果我们引用了event对象,由于event对象中有对dom的引用,隐式的造成了循环引用
    • 通常可以通过在移除dom前解除事件监听,但是dom可能绑定多个事件监听
    • 因此更好的做法是在移除dom后,手动的释放引用dom的变量

    相关文章

      网友评论

          本文标题:内存泄漏

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