学习一下闭包的基本概念、作用、缺点等知识。
一、基本概念
函数对象可以通过作用域链相互关联起来,函数体内部的变量可以保存在函数作用域中,这种特性被称为闭包。
闭包的表现形式就是一个内部函数可以访问包含它的外部函数中的变量。 闭包可以捕捉局部变量或参数,并一直保存下来。
二、作用
1.私有化变量
let timer = (function () {
var count = 0
return function () {
return count++
}
}())
timer()
console.log(timer())
timer()
console.log(timer())
timer()
console.log(timer())
timer()
console.log(timer())
2.模拟块级作用域
function closure(count) {
(function () {
for (var i = 0; i < count; i++) {
console.log(i);
}
})();
console.log(i); // 报错
}
closure(10)
3.创建模块
function Module(window) {
var DEBUG = "debug"
function log(args) {
console.log(args)
}
function debug(args) {
console.log(DEBUG + args);
}
function write(args) {
document.write(args)
}
return {
log: log,
debug: debug,
write: write
}
}
//调用
var mod = Module(window);
mod.log("log")
mod.debug(12232)
mod.write("dadsa")
三、缺点
- 增大内存使用量,使用不当很容易造成内存泄露。
- 闭包对脚本性能具有负面影响,包括处理速度和内存消耗。闭包常驻内存。
四、解决方案
- 给闭包调用后的结果赋值null。
视频讲解https://www.bilibili.com/video/BV1Bs4y1d7UD/?vd_source=be4efb0f2cfe5e83a1774731474196fd