例一
const btn = document.querySelector('#btn')
let count = 1
btn.addEventListener('click', function() {
++count
console.log(count)
})
例一中,count
是全局变量,**全局变量只有你关闭浏览器或页面才会被销毁!**所以count
仿佛就有了存储功能,能够记录每次变化后的值,你点或者不点,count
就乖乖呆在那里,保持着上次点击++后的值。
例二
const btn = document.querySelector('#btn')
btn.addEventListener('click', function() {
let count = 1
++1
console.log(count)
})
例二中,用户每次点击按钮,函数执行完毕后,count
会被当成没用的变量回收了,换句话说就是内存被销毁了!(没有用的局部变量就会被销毁内存)
例三
!(function() {
const btn = document.querySelector('#btn')
let count = 1
btn.addEventListener('click', function() {
++count
console.log(count)
})
})();
例三中,闭包最大的特性就是,如果函数使用了函数外的某个变量,那这个变量就会享受和全局变量一样的特权,不会被回收啊!除非你关闭浏览器或页面!
那么什么是内存泄漏?
很简单,如果像这种享受全局变量不会被销毁的特权的闭包达到一定数量,那内存就要被撑爆了,电脑对浏览器是很抠门的,内存就分配了这么点,一多就会爆,这就是内存泄漏。