news 2026/6/3 1:42:38

怎样理解JavaScript的闭包

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
怎样理解JavaScript的闭包

黑马的介绍:

闭包 = 内层函数 + 外层函数的变量 二者缺一不可

//典型闭包 function outer(){ const a = 1 function fn(){ console.log(a) } return fn } outer() //此时外部访问不了a,但是如果函数内部是return fn 外部可以通过outer()打印a,这就保护了a的值不会被篡改

javascript.info网站的介绍:

闭包是指一个函数可以记住其外部变量并可以访问这些变量。在某些编程语言中,这是不可能的,或者应该以一种特殊的方式编写函数来实现。但 如上 所述,在 JavaScript 中,所有函数都是天生闭包的(只有一个例外,将在 "new Function" 语法 中讲到)。

也就是说:JavaScript 中的函数会自动通过隐藏的[[Environment]]属性记住创建它们的位置,所以它们都可以访问外部变量。

function makeCounter() { let count = 0; return function() { return count++; }; } let counter = makeCounter(); alert( counter() ); // 0 alert( counter() ); // 1 alert( counter() ); // 2

GPT的解释:

普通情况

先看这个例子:

function test() { let num = 100; console.log(num); } test();

执行过程:

调用 test ↓ 创建变量 num ↓ 输出 100 ↓ test 执行结束 ↓ num 被销毁

这里没有问题。

返回函数的情况

再看:

function test() { let num = 100; return function() { console.log(num); } } const fn = test();

执行到这里时:

test() ↓ 创建 num ↓ 创建匿名函数 ↓ 返回匿名函数

关键来了:这个匿名函数里面用到了num

function() { console.log(num); }

JavaScript 引擎发现:

这个函数以后还要用到 num

所以不会立即销毁num

而是把:

num = 100

和这个函数一起保留下来。类似于:

fn ├── 函数代码 └── 关联的变量环境 num = 100

这就是闭包。

我个人的理解

我之前的理解是这样的:

function makeCounter() { let count = 0; return function() { return count++; }; } let counter = makeCounter(); alert( counter() ); // 0 alert( counter() ); // 1 alert( counter() ); // 2

counter这个变量拿到了返回的function(){}这个匿名函数的地址,这个函数本质上还是makeCounter里的函数。而这个地址里针对count所做的操作都是针对同一个count来进行的。

目前看来我的理解并不是很对,还是参考上面的吧。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/3 1:42:36

注塑加工厂主要分布在哪几个产业带?珠三角、长三角、环渤海梯队全对比

注塑加工是中国制造业里规模最大、覆盖最广的通用工序之一。从家电外壳到汽车内饰,从医疗耗材到消费电子,几乎所有需要塑料结构件的行业都要用到注塑车间。天下工厂产业研究院统计发现,全国在产注塑加工工厂超过 9.2 万家,分布高度集中在三大弧形产业带上——珠三角、长三角、环…

作者头像 李华
网站建设 2026/6/3 1:41:41

独立大模型赛道风云:‘AI四小龙’市值分化,谁先看见Coding成关键

‘AI六小龙’标签的兴衰 如果要用一句话概括独立大模型赛道这两年的事,那就是:‘AI六小龙’这个标签诞生于2023年4月,消亡于2025年下半年。事实上,六家公司变成了四家。零一万物在2025年放弃了万亿参数以上的超大基模预训练&#…

作者头像 李华
网站建设 2026/6/3 1:41:01

Loop完整指南:用优雅的环形菜单重塑你的macOS窗口管理体验

Loop完整指南:用优雅的环形菜单重塑你的macOS窗口管理体验 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 你是否曾经在Mac上同时打开十几个窗口,却发现自己像在迷宫中寻找出口&…

作者头像 李华
网站建设 2026/6/3 1:38:52

Diablo Edit2:终极暗黑破坏神2存档修改器完全指南 [特殊字符]

Diablo Edit2:终极暗黑破坏神2存档修改器完全指南 🎮 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit Diablo Edit2是一款功能强大的开源暗黑破坏神2存档修改器,…

作者头像 李华