js内存泄漏问题

发布于 2022-09-04 19:37:52 字数 296 浏览 16 评论 0

   var user = { name: 'tom', age: 20, gender: 'male' }
   var test = document.getElementById('test');
       test.onclick = function() {
           test.innerHTML = user.name;
       }
   user = null; // 释放对象
   

最近遇到一个这样的面试题,请问这段有没有内存泄漏,如果有的话麻烦大神指出为什么,并且如何消除内存泄漏

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

若能看破又如何 2022-09-11 19:37:52

内存泄漏简单的说就是分配的内存既不能使用,又不能回收,直到浏览器进程结束。

对于循环引用问题直接消除引用就好,设置test=null,因为js垃圾回收机制会周期的执行,找出不再使用的变量,然后释放掉其占用的内存.
垃圾回收

拔了角的鹿 2022-09-11 19:37:52

什么叫内存泄漏?

这个倒是会执行出错。。。。。。

捶死心动 2022-09-11 19:37:52

原理就是下面这张图,你的test就是图里的elem,引用一个dom元素,并添加一个事件处理器给这个dom元素,但事件处理的函数又引用了外部作用域的test,这样就照成了循环引用。

会照成内存泄露的其实是test而不是user,将外部的test的引用清空即可破坏这个循环引用。

图片描述

这些其实在现代浏览器中由于标记-清除算法的使用都不会有问题了,旧浏览器因为垃圾回收算法只有于引用才会导致内存泄露,即循环引用导致对象不可用之后仍无法被垃圾回收。

凶凌 2022-09-11 19:37:52

肯定有,CVTE的面试题里面有这个。因为click事件里面保留了对user.name的引用,所以还是会有泄露的。
如何消除的问题,我能想到的也只有高程上说的直接解除引用了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文