说明:此次分享不涉及ES6的let,const,块级作用域,这些其实都是对本次分享内容的扩展。
-
闭包的重要性
JS的内功心法,闭包是JavaScript中非常重要的核心概念,关系着JS里很多核心的机制,理解了它,很多问题都会迎刃而解,不理解闭包用JS永远像隔着一层窗户纸。
前端发展日新月异,内功练好,才能以不变应对万变。
-
网络上一些对闭包的解释
-
MDN: 闭包是函数和声明该函数的词法环境的组合
-
面试官问我:什么是JavaScript闭包,我该如何回答? —— 外部函数调用之后其变量对象本应该被销毁,但闭包的存在使我们仍然可以访问外部函数的变量对象,这就是闭包的重要概念;闭包只能取得包含函数中的任何变量的最后一个值
-
浅谈闭包 —— 有权访问另一个函数作用域内变量的函数都是闭包
-
廖雪峰 —— 一个函数返回了一个函数后,其内部的局部变量还被新函数引用
问题: 都是对闭包表面现象的一种描述,没有从本质上解释清楚闭包是如何产生的,看完之后貌似是懂了其实还是不懂。闭包的本质是什么,就需要从内存的角度分析,没有内存图讲闭包都是耍流氓。
-
-
学习方法
先抽象再具体。
从幼儿园就开始用这个方法来学习了,教小朋友1+1=2,太抽象了,让他掰着手指头数就马上明白了。
弄清楚哪些是需要去记忆的,哪些是需要去理解的,需要理解的东西多从内存的角度来理解。
比如如何理解JS的基本类型和引用类型,JS高程中开始写到,“基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象”,这其实是对知识的抽象总结,但是只记忆这个抽象总结是无法真正理解问题的本质的。
之后JS高程又从内存的角度对基本类型和引用类型进行说明,从而能够从本质上理解什么是基本类型和引用类型。