小白都能看懂的闭包原创
# 闭包概念
# 简单解释
闭包就是一个访问父函数局部变量的函数
# 详细解释
《javascript 高级程序设计》中闭包的概念:闭包,其实是一种语言特性,它是指的是程序设计语言中,允许将函数看作对象,然后能像在对象中的操作般在函数中定义实例(局部)变量,而这些变量能在函数中保存到函数的实例对象销毁为止,其它代码块能通过某种方式获取这些实例(局部)变量的值并进行应用扩展。
# 闭包目的
闭包是为了让变量长久保存(防止垃圾回收)的同时不会造成全局污染。
# 误区
这里我们容易产生一个常见的概念误区,有些人会把 JavaScript 执行上下文,或者作用域(Scope,ES3 中规定的执行上下文的一部分)这个概念当作闭包。 实际上 JavaScript 中跟闭包对应的概念就是“函数”,可能是这个概念太过于普通,跟闭包看起来又没什么联系,所以大家才不自觉地把这个概念对应到了看起来更特别的“作用域”吧(其实我早年也是这么理解闭包,直到后来被朋友纠正,查了资料才改正过来)。
# 闭包代码
function a() {
let i = 0;
return function () {
i++;
console.log(i);
};
}
var x = a(); //a()执行的结果就是闭包
x(); //1
x(); //2
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 闭包缺点
使用闭包会导致内存泄漏。闭包会携带包含其它的函数作用域,因此会比其他函数占用更多的内存。
# 总结
每当我们学习一项技术的时候,应该知道其利弊,并且灵活使用,在常见业务场景中遇到一些人都是为了让变量不全局污染,有块级作用域,而这时候可以使用 es6 的 let 或者 const,不要为了使用闭包而用闭包。
上次更新: 2024/07/21, 21:46:04