常见英文单词: heap: 堆 stack:栈
解释:堆栈是两种数据结构。
马上将在另一个专栏里写写数据结构与算法。
马上将在另一个专栏里写写操作系统方面的知识。
一、MDN:
一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)。也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域。在 JavaScript 中,每当创建一个函数,闭包就会在函数创建的同时被创建出来。
闭包 - JavaScript | MDN (mozilla.org)
二、阮一峰网站
学习Javascript闭包(Closure) - 阮一峰的网络日志 (ruanyifeng.com)
思路:
1.变量的作用域
2.如何从外部读取局部变量?
注意:这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!(非常值得注意的点)
3.闭包的概念
4.闭包的用途
5.使用闭包的注意点
可能是我的理解问题,这篇文章读下来一遍对闭包的理解还是不够。
三、对阮一峰关于闭包理解的讨论
(32 封私信 / 80 条消息) 阮一峰关于 Javascript 中闭包的解读是否正确? - 知乎 (zhihu.com)
由此引发了更多的讨论...
四、知乎文章:
javascript 近乎神话般的概念:闭包 - 知乎 (zhihu.com)
插句题外话,文章的侧重点不同,对各个问题解释的深度不同
我一直想搞明白的一个问题是那个经典的循环定时器中let和var的区别,如果这个问题的深度是10,我感觉我只理解了6,及格水平,还可以往深挖,for循环的作用域在每次循环时是怎么样的?往内存和数据结构的深度去理解会是什么样呢?
五、方应杭知乎
「每日一题」JS 中的闭包是什么? - 知乎 (zhihu.com)
思路:
1.定义:「函数」和「函数内部能访问到的变量」的总和,就是一个闭包。
2.为什么要函数套函数呢?因为需要局部变量。
3.为什么要 return?return bar 只是为了 bar 能被使用,也跟闭包无关。
4.闭包的作用:
闭包常常用来「间接访问一个变量」。换句话说,「隐藏一个变量」。
这篇文章写得很直接,没有其他更多的概念,容易理解。在我第一次接触闭包时,我记住的就是这个答案。但是如今觉得还是不够深入。当然,也可能是我理解错了。
本文会继续更新,网上关于闭包概念的解释太多了,去繁存简,上文这五篇我个人觉得还是比较不错的。
本文解析了JavaScript闭包的基本概念,通过MDN和阮一峰的视角对比,深入探讨了闭包的创建、作用域、用途及注意事项,同时触及了循环定时器中let与var的区别。
1万+

被折叠的 条评论
为什么被折叠?



