问答题1171/1593什么是内存泄漏?什么原因会导致呢?

难度:
2021-07-06 创建

参考答案:

内存泄露的解释:程序中己动态分配的堆内存由于某种原因未释放或无法释放。

  • 根据JS的垃圾回收机制,当内存中引用的次数为0的时候内存才会被回收
  • 全局执行上下文中的对象被标记为不再使用才会被释放

内存泄露的几种场景

  • 全局变量过多。通常是变量未被定义或者胡乱引用了全局变量
1// main.js 2// 场景1 3function a(){ 4 b=10; 5} 6a(); 7b++; 8 9// 场景2 10setTimeout(()=>{ 11 console.log(b) 12},1000)
  • 闭包。 未手动解决必包遗留的内存引用。定义了闭包就要消除闭包带来的副作用
1 2function closuer (){ 3 const b = 0; 4 return (c)=> b + c 5} 6 7const render = closuer(); 8 9render(); 10render = null; // 手动设置为null,GC会自己去清除
  • 事件监听未被移除
1 2function addEvent (){ 3 const node = document.getElementById('warp'); 4 node.addEventListener('touchmove',()=>{ 5 console.log('In Move'); 6 }) 7} 8 9const onTouchEnd = (){ 10 const node = document.getElementById('warp'); 11 node. 12} 13 14useEffect(()=>()=>{ 15 const node = document.getElementById('warp'); 16 node.removeEventListener('touchmove'); 17}) // 类似react 生命周期函数: componentWillUnmount 18render(<div id='warp' onTouchEnd={onTouchEnd}> 19 // code... 20</div>)
  • 缓存。建议所有缓存都设置好过期时间。

最近更新时间:2024-08-10

赞赏支持

预览

题库维护不易,您的支持就是我们最大的动力!