意外的全局变量
1 2 3 4 5 6 7 8 9 10 11 12 13
| function fun() { a = 10 } func() console.log(a)
function fun() { this.a = 10 } func() console.log(a)
|
未清理的DOM元素引用
1 2
| var a = document.getElementById('id'); document.body.removeChild(a);
|
不能回收,因为存在变量a对它的引用。虽然我们用removeChild移除了,但是还在对象里保存着#的引用,即DOM元素还在内存里面。
解决方法: a = null;
定时器
1 2 3 4 5 6 7 8 9 10 11 12
| let temp = 'hello' setTimeout(()=>{ console.log(temp) },500)
let temp = 'hello' const timer = setTimeout(()=>{ console.log(temp) clearTimeout(timer) },500)
|
闭包
1 2 3 4 5 6 7 8 9 10 11 12
| let fun = function() { let hello = 'hello' return function () { console.log(hello) } }
fun()()
fun = null
|
console.log
在传递给 console.log的对象是不能被垃圾回收 ♻️,因为在代码运行之后需要在开发工具能查看对象信息。所以最好不要在生产环境中 console.log任何对象。