前置知识!!!
闭包 是Javascript语言的一个重难点, 也是它的特色, 很多高级应用都要依靠闭包来实现。在各种专业文献上学习"闭包"的时候, 就一个感觉 – “抽象” !
特别是学习内存泄漏的时候, 没想明白为什么使用闭包的时候 不及时清除函数中的元素会导致内存泄漏, 直到我的第一次面试结束之后, 回顾的时候把这几个知识串联了起来, 一切都明朗了。
这里先给大家看个 解除闭包的引用, 释放数据内存 的例子(看不懂没关系, 后面才是正文开始)
function createClosure() {
let externalData = {
/* 一些数据 */ };
return function innerFunction() {
// 使用externalData做一些事情
};
}
let myClosure = createClosure();
// ... 使用myClosure做一些事情
// 当你不再需要myClosure时
myClosure = null; // 移除对闭包的引用
// 注意:如果externalData仍然被其他闭包或外部代码引用,则它不会被回收
// 你需要确保没有其他引用指向它,或者它本身也应该被设置为null
这里还要补充一点 垃圾回收机制 的知识, 方便后续理解:
前端中的垃圾回收机制(Garbage Collection, 简称GC)是一种 自动内存