学习一下闭包的基本概念、作用、缺点等知识。
一、基本概念
函数对象可以通过作用域链相互关联起来,函数体内部的变量可以保存在函数作用域中,这种特性被称为闭包。
闭包的表现形式就是一个内部函数可以访问包含它的外部函数中的变量。 闭包可以捕捉局部变量或参数,并一直保存下来。
二、作用
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
闭包是JavaScript中一种重要的特性,它允许内部函数访问并保存外部函数的变量。闭包可用于实现私有变量、模拟块级作用域以及创建模块。然而,不恰当的使用可能导致内存泄漏和性能问题。解决方法包括在使用后将闭包引用设为null。视频讲解深入探讨了这些概念。
1167

被折叠的 条评论
为什么被折叠?



