12、JavaScript常见的内存泄露问题 - JavaScript学习系列文章
多前端同学可能觉得这是浏览器或引擎该操心的事, 但理解内存管理能帮你写出更高效的代码, 还能避免各种内存泄漏的坑.一、常见的内存泄露场景1) 意外的全局变量:functionleaky() {leak 这是一个全局变量;// 本意是 let leak ...this.anotherLeak 这也是全局的;// 在非严格模式下this 指向 window}// 解决方法使用严格模式 use strict2) 被遗忘的定时器和回调:// 定时器泄漏let someData getHugeData();setInterval(() {let node document.getElementById(node);if(node) {node.innerHTML JSON.stringify(someData);}},1000);// 即使移除 DOM 节点定时器还在引用 someData 和 node// 事件监听泄漏functionsetup() {let btn document.getElementById(myButton);btn.addEventListener(click, onClick);}functiononClick() {console.log(clicked!);}// 如果 btn 被移除但没解绑事件相关内存无法释放3) 闭包的不当使用:functionouter() {let bigArray newArray(1000000).fill(*);returnfunctioninner() {console.log(inner);// 即使不用 bigArray它也会被保留因为闭包保留了整个作用域链};}let hold outer();// bigArray 无法被回收4) DOM引用未清理:let elements {button:document.getElementById(myButton),div:document.getElementById(myDiv)};functionremoveDiv() {document.body.removeChild(elements.div);// 虽然从 DOM 移除了但 elements.div 仍引用着这个节点}二、内存优化技巧1) 合理使用变量作用域:// 不好的做法functionprocess(data) {let result [];// 大数组处理...for(let i 0; i data.length; i) {result.push(data[i] *2);}// 后续只使用 result 的前10项return result.slice(0,10);// 但整个 result 数组会保留在内存中}// 更好的做法functionprocessBetter(data) {let result [];for(let i 0; i 10; i) {// 只处理需要的部分if(i data.length) {result.push(data[i] *2);}}return result;// 内存占用更小}2) 及时清理引用:// 定时器let timer setInterval(() {...},1000);// 不需要时clearInterval(timer);// 事件监听functioncleanUp() {btn.removeEventListener(click, onClick);}// WeakMap/WeakSet 允许对象被垃圾回收let weakMap newWeakMap();let obj {};weakMap.set(obj,some value);// 如果 obj 被回收weakMap 中的条目自动消失3) 分块处理大数据:// 处理大数组时不要一次性处理functionprocessLargeArray(array, chunkSize, callback) {let index 0;functionnext() {let chunk array.slice(index, index chunkSize);index chunkSize;if(chunk.length) {callback(chunk, next);}}next();}// 使用processLargeArray(hugeArray,1000,(chunk, next) {// 处理当前块processChunk(chunk);// 使用 setTimeout 或 requestIdleCallback 给浏览器喘息机会setTimeout(next,0);});4) 使用对象池: 频繁创建销毁对象? 试试对象池:classObjectPool {constructor(createFn) {this.createFn createFn;this.pool [];}get() {returnthis.pool.length ?this.pool.pop() :this.createFn();}release(obj) {// 重置对象状态(如果需要)this.pool.push(obj);}}// 使用let particlePool new ObjectPool(() ({x:0, y:0, vx:0, vy:0}));// 需要时let particle particlePool.get();// 使用完后particlePool.release(particle);

相关新闻

AGENTS.md:为AI编程助手编写项目说明书,提升代码生成准确率

AGENTS.md:为AI编程助手编写项目说明书,提升代码生成准确率

1. 项目概述:为什么你的AI代码助手需要一份“项目说明书”?最近在折腾各种AI编程工具,从GitHub Copilot到Cursor,再到本地部署的开源模型,我发现一个挺有意思的现象:很多时候AI生成的代码单看逻辑没问题&am…

2026/8/26 12:12:34 阅读更多 →
SNP遗传关联分析的统计建模与MATLAB实战

SNP遗传关联分析的统计建模与MATLAB实战

1. 这道题不是在考编程,而是在考你如何把生物学问题“翻译”成数学语言2016年“中关村青联杯”全国研究生数学建模竞赛B题——《具有遗传性疾病和性状的遗传位点分析》,表面看是道生物信息学题,实则是一场典型的“跨学科翻译能力”测试。我带…

2026/8/26 12:12:34 阅读更多 →
Hadoop面试进阶:从原理到实战,构建分布式系统解题思维

Hadoop面试进阶:从原理到实战,构建分布式系统解题思维

1. 从“背题”到“讲题”:Hadoop面试的本质转变最近帮团队面试了几个大数据方向的候选人,发现一个挺有意思的现象:很多人能把Hadoop的面试题背得滚瓜烂熟,从HDFS的读写流程到MapReduce的Shuffle过程,都能一字不差地复述…

2026/8/26 12:12:34 阅读更多 →

最新新闻

【花雕动手做】AI智能体 ZXAIEC43 问答式 DIY 人工智能开发板

【花雕动手做】AI智能体 ZXAIEC43 问答式 DIY 人工智能开发板

AI智能体 ZXAIEC43 问答式 DIY 人工智能开发板 • 高性能PCBA与音频设备:确保智能体稳定运行,提供清晰的语音交互体验。 • 深度优化的嵌入式软件:针对智能体应用场景,确保快速响应和高效运行。 • 集成大模型云平台:云平台已经集成了全球大多数AI大模型,可以根据客户的具…

2026/8/26 14:17:23 阅读更多 →
Oxc 全家桶

Oxc 全家桶

Oxc 全家桶(Rust 写的新一代 JS/TS 工具链,Vite 底层未来)Oxc Oxidation Compiler,全部 Rust 开发,各个模块可以单独用,不用全套一起上。oxc‑parser(底层解析器) 把 TSX/JSX 解析成…

2026/8/26 14:17:23 阅读更多 →
超级详细的 Ollama 结合 DeepSeek + Docker + Open Web UI 构建本地AI知识库教程

超级详细的 Ollama 结合 DeepSeek + Docker + Open Web UI 构建本地AI知识库教程

一、简介 Open WebUI 是一个仿照 ChatGPT 界面,为本地大语言模型提供图形化界面的开源项目,可以非常方便的调试、调用本地模型。你能用它连接你在本地的大语言模型(包括 Ollama 和 OpenAI 兼容的 API),也支持远程服务器…

2026/8/26 14:17:23 阅读更多 →
打开 Windows Docker Desktop 出现 Docker Engine Stopped 问题

打开 Windows Docker Desktop 出现 Docker Engine Stopped 问题

一、关联文章: 1、Docker Desktop 安装使用教程 2、家庭版 Windows 安装 Docker 没有 Hyper-V 问题 3、安装 Windows Docker Desktop - WSL问题 二、问题解析 打开 Docker Desktop 出现问题,如下: Docker Engine Stopped : Do…

2026/8/26 14:17:23 阅读更多 →
莫比乌斯带的数学原理和视觉特性

莫比乌斯带的数学原理和视觉特性

import numpy as np from manim import * import manim.utils.rate_functions as rate_funcs# 定义黑板的黑绿色 BLACKBOARD_GREEN "#1E352F"class MobiusRaceScene04(ThreeDScene):def construct(self):# 1. 设置黑板背景色和初始相机视角self.camera.background_c…

2026/8/26 14:17:23 阅读更多 →
systemVerilog 复习第一天——sv的仿真时间调度机制、enum、string、logic、数组、clock blocking

systemVerilog 复习第一天——sv的仿真时间调度机制、enum、string、logic、数组、clock blocking

文章目录sv的仿真时间调度机制Time literalformattimescaleEvents RegionsVerilog的赋值连续赋值过程赋值eventprocesstime-solt为什么要引入event region调度机制详解简要流程图表总结sv的一些语法特性自动推断长度支持string、real等logicstringarray定宽数组动态数组clock b…

2026/8/26 14:16:23 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/25 10:31:12 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →