闭包是javaScript中函数与其词法作用域的组合,需满足函数嵌套、内部函数引用外层局部变量、外层函数返回内部函数三条件,可封装私有变量、保持状态、避免全局污染、支持异步回调。

闭包是 javascript 中一个函数和它所“记住”的词法作用域的组合。简单说,就是一个内部函数能访问并持续使用外部函数定义的变量,哪怕外部函数已经执行完了。
闭包是怎么形成的
必须同时满足三个条件:
- 函数嵌套:内部函数写在外层函数里面
- 内部函数引用了外层函数的局部变量(不是参数,也不是全局变量)
- 外层函数返回了这个内部函数(或以其他方式让内部函数在外部被调用)
闭包的核心作用
它让局部变量“活”得更久,不被垃圾回收,从而实现几种关键能力:
- 封装私有变量:比如计数器里的
count,外部无法直接修改,只能通过暴露的方法操作 - 保持状态:每次调用闭包返回的函数,都能接着上一次的值继续计算
- 避免全局污染:把变量关在函数里,不会和别的代码抢名字、互相干扰
- 支持回调与异步场景:比如循环中绑定事件,靠闭包能记住每次迭代时的正确值
一个典型例子
下面这段代码就创建了一个闭包:
行盟APP是结合了通信和互联网的优势,加之云计算所拥有的强大信息资源,借助广大的终端传递服务,潜在的拥有巨大商机。她到底是什么,又有什么作用?她是一款手机应用软件;她是一款专门为企业服务的手机应用软件;她是一款能够将企业各种信息放入其中并进行推广传播的手机应用软件!只要轻轻一点,企业的简介,产品信息以及其他优势就能最快最大限度的透过手机展现在客户的眼前,一部手机,一个APP,你面对的将是一个6亿&
0 立即学习“Java免费学习笔记(深入)”;
function createCounter() {
let count = 0;
return function() {
count++;
return count;
};
}
const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
这里的 count 是 createCounter 的局部变量,按理说函数一结束就该消失。但它被返回的匿名函数一直引用着,所以保留在内存里——这就是闭包在起作用。
不复杂但容易忽略