JavaScript学习笔记—闭包
1. 定义
闭包就是能访问到外部函数作用域中变量的函数
2. 什么时候使用
当需要隐藏一些不希望被别人访问的内容时就可以使用闭包
3. 构成要件
(1)函数的嵌套
(2)内部函数要引用外部函数中的变量
(3)内部函数要作为返回值返回
function outer(){ let num = 0; return () => { num++; console.log(num); } } const newFn = outer(); newFn(); // 1 newFn(); // 2 newFn(); // 3
4. 原理
闭包利用的就是词法作用域
let a = "全局变量a"; /* 函数作用域,在函数创建时就已经确定(又称词法作用域) 和调用的位置无关 */ function fn() { console.log(a); } function fn2() { let a = "fn2中的变量a"; fn(); } fn2(); // 全局变量a function fn3() { let a = "fn3中的变量a"; function fn4() { console.log(a); } fn4(); } fn3(); // fn3中的变量a
5. 一些注意问题
- 闭包的声明周期
(1)闭包在外部函数调用时产生,外部函数每次调用都会产生一个全新的闭包
(2)在内部函数丢失时销毁(内部函数被垃圾回收了,闭包才会消失) - 注意事项
闭包主要用来隐藏一些不希望被外部访问的内容,这就意味着闭包需要占用一定的内存空间
相较于类来说,闭包比较浪费内存空间(类可以使用原型而闭包不能)
需要执行次数较少时,才使用闭包;需要大量创建实例,实用类
function outer() { let someVariable = "someValue"; return function(){ // 匿名函数返回 console.log(someVariable); } } // 调用函数,产生闭包 outer(); function outer2() { let num = 0; return () => { num++; console.log(num); } } let fn1 = outer2(); // 独立闭包 let fn2 = outer2(); // 独立闭包 fn1(); // 1 fn2(); // 1 // 函数被回收,闭包销毁 fn1 = null; fn2 = null;
分类:
JavaScript
标签:
JavaScript学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南