敲黑板
- 什么是内存溢出?
- 一种程序运行出现的错误。
- 当程序运行时需要的内存超过剩余的内存时,就会内存溢出的错误。
- 什么是内存泄露?
- 占用的内存没有及时释放。
- 内存泄露积累多了就容易导致内存溢出。
- 常见的内存泄露:意外的全局变量、没有及时清理的定时器或回调函数、闭包。
下面我们上例子帮助理解
内存溢出
const obj = {}
for (var i = 0; i < 100000000; i++) {
obj[i] = new Array(100000000)
console.log('-----------------')
}
复制代码
由于循环量过大而导致物理内存不够,个别小土豪设置循环的值得要大一些。
内存泄露
1.意外的全局变量
function fn1() {
a = 1
console.log(a)
}
fn1()
复制代码
执行函数的时候,由于变量提升而导致a变成全局变量,函数执行完之后a还占着空间
- 定时器没有关闭
const intervalTime = setInterval(function () {
console.log("------")
}, 2000)
复制代码
由于没关闭定时器而导致内存溢出,除非浏览器关闭、刷新,不然的话会一直执行下去哟。
保存良好习惯,用完就关
clearInterval(intervalTime) // 关闭定时器,释放内存
复制代码
- 闭包
function fn1() {
let a = 2
function fn2() {
console.log(++a)
}
return fn2
}
const fn = fn1()
fn()
复制代码
执行完函数之后 a没有被释放掉,是因为fn保存了fn1函数。
记得清空变量,等待回收。
fn = null // 释放内存
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END