# 前言
这一章节给大家介绍的知识点相对比较简单, 但是却是非常重要的. 而且也是在面试过程中经常会被问到的一部分内容.
通过此次阅读你可以学习到:
- 4种常见的内存泄露
- 内存泄露的识别方法
# 4种常见的内存泄露
其实在实际开发中, 我们很容易不经意的就写出内存泄露的代码, 比如以下几种情况可能都是你遇到过的.
# 一、意外的全局变量
# 未声明的变量
当我们在一个函数中给一个变量赋值但是却没有声明它时:
function fn () {
a = "Actually, I'm a global variable"
}
@前端进阶之旅: 代码已经复制到剪贴板
此时变量a相当于是window对象下的一个变量:
function fn () {
window.a = "Actually, I'm a global variable"
}
@前端进阶之旅: 代码已经复制到剪贴板
而之前我们已经说了全局变量是很难被垃圾回收器回收的, 所以要是有这种意外的全局变量应该要避免.
# 使用this创建的变量
还有一种情况是这样的:
function fn () {
this.a = "Actually, I'm a global variable"
}
fn();
@前端进阶之旅: 代码已经复制到剪贴板
我们知道, 这里this 的指向是window, 因此此时创建的a变量也会被挂载到window对象下.
避免此情况的解决办法是在 JavaScript 文件头部或者函数的顶部加上 'use strict', 开启严格模式, 使得this的指向为undefined, 这样就可以避免了.
当然如果你必须使用全局变量存储大量数据时,确保用完以后把它设置为 null 或者重新定义。
# 二、被遗忘的计时器或回调函数
# 定时器引起
当我们在代码中使用定时器也有可能会造成内存泄露:
