前言
在了解闭包之前,需要先了解几个概念,这样更容易理解闭包的优缺点。
js中的基础类型、对象、函数等内容在创建之初会被存储在内存中,当这些内容不再被调用的时候,说明这些内容就没有继续保留的必要了,也就是说,它们已经变成了垃圾
。
垃圾回收: 程序在运行过程中会产生很多垃圾,这些垃圾会占用很多的内存,JS引擎会定期对这些垃圾进行清除。
内存泄露: 无法被及时清除的无用内存。
作用域: 可以简单的理解成变量能被够调用的范围或区域。
一、什么是闭包?
闭包: 可以调用其它函数内部变量的函数。
说人话就是,在函数内部定义一个新函数,并把这个新函数返回出去,就是闭包。
闭包的定义有两个部分:1. 内部函数;2. 内部函数使用的外部变量。
function fn1() {
let text = 1;
function fu2() {
console.log(text);
}
return fn2;
}
let fn3 = fn1();
fn3();
上面显示的就是一个闭包, fn1()
中定义了一个新的函数 fn2()
,这个函数可被调用的作用域范围是 fn1()
内部,但事实上,因为这个函数被 return
出去了,所以在外部也可以调用,因此这是一个闭包。
二、闭包的优点
- 闭包可以访问与其定义环境相关的变量。
- 通过使用闭包可以避免全局变量的命名冲突问题。
- 闭包可以延长变量的生命周期,使得变量不会被过早释放。
三、闭包的缺点
- 在某些情况下,闭包可能会导致内存泄露。
- 在某些情况下,闭包可能会占用过多的内存空间,导致性能下降。
- 闭包需要访问外部函数的变量,因此会带来一定的性能损失。
END