闭包函数
概念
闭包函数:声明在一个函数中的函数,叫做闭包函数。
闭包:内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)了之后。
优缺点
让外部访问函数内部变量成为可能;
局部变量会常驻在内存中;
可以避免使用全局变量,防止全局变量污染;
会造成内存泄漏(有一块内存空间被长期占用,而不被释放)
代码示例
1 function outer() { 2 //私有空间 3 function inner() { 4 console.log("内部函数") 5 } 6 return inner; 7 } 8 const closure=outer(); 9 closure(); 10 // const closure=function(){ 11 // console.log("内部函数") 12 // } 13 14 15 16 17 // ES6 18 const outer=()=>{ 19 return ()=>{ 20 console.log("内部函数") 21 } 22 } 23 const closure=outer(); 24 closure();
案例(计时器)
像我们如下写一个计时器
// // 计数器 const add=()=>{ let counter=0; counter++; return counter; } // 调用三次 add() console.log(add()); console.log(add()); console.log(add());
会发现三次执行效果都是1,这是因为每一次调用都会销毁原函数,所以需要使用闭包来达到计时效果,调用闭包函数是不会销毁闭包函数的,会一直保存,也就造成了内存占用
const add = () => { let counter = 0; //闭包 return () => { counter++; return counter; } } // 调用三次 add() const closure=add(); console.log(closure()); console.log(closure()); console.log(closure());
如此,便能实现计时效果。
案例(验证码)
像我们登录设备的时候获取验证码,倒计时可以使用闭包函数来实现,如
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <p id="demo"></p> </body> </html> <script> const add = () => { let counter = 10; //闭包 return () => { counter--; return counter; } } const closure = add() let timer = setInterval(() => { let h1 = document.getElementById('demo') h1.textContent = closure(); if (h1.textContent == 0) { clearInterval(timer) h1.textContent = "重新获取验证码"; } }, 1000) </script>
达到一种倒计时效果。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人