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;
posted @   程序员张3  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示