前言
学javascript肯定会遇到闭包这个问题,闭包就是神器,还不知道的可以看下阮大神的闭包解释,我个人觉得吧,只看那个不一定能懂,脱离作用域谈闭包有点耍流氓,就像学霸眼中的“显然”可知,最好是先看懂作用域,了解作用域链和词法作用域(静态作用域)之后,差不多就懂了。
问题与实验
今天朋友分享了一篇文章前端基础进阶(六):在chrome开发者工具中观察函数调用栈、作用域链与闭包,看这篇差点怀疑人生,经过和同学的讨论,和测试。
请看下面两个图:
结果
如图,右边所示scope里面,就是作用域链,closure就是那篇文章纠结的地方,他以为能看到就能用到,其实并不能,只是因为浏览器被优化掉了。
分析总结
闭包就是函数在运行的时候存有词法作用域的引用,浏览器做了一些优化,可能是为了垃圾回收吧。
我朋友也写了个总结参考这里
如有错误,请在评论区指正,谢谢