经典的必问闭包(Closure)

本文解析了JavaScript闭包的基本概念,通过MDN和阮一峰的视角对比,深入探讨了闭包的创建、作用域、用途及注意事项,同时触及了循环定时器中let与var的区别。

常见英文单词: 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.闭包的作用:

                        闭包常常用来「间接访问一个变量」。换句话说,「隐藏一个变量」。

       这篇文章写得很直接,没有其他更多的概念,容易理解。在我第一次接触闭包时,我记住的就是这个答案。但是如今觉得还是不够深入。当然,也可能是我理解错了。

本文会继续更新,网上关于闭包概念的解释太多了,去繁存简,上文这五篇我个人觉得还是比较不错的。

        

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值