闭包--Closure

学习Ajax模式之前,需要对闭包和回调函数的概念有所理解.

闭包的概念

当一个函数内调用另一个函数,同时这个函数引用了父函数的变量的时候,执行父函数的时候,父函数的内部变量不会被销毁,而是像被东西包裹住了阻碍了内存回收机制.这个包裹机制就叫做闭包closure.

从设计者的角度理解闭包

  • 广义地理解函数
    函数本身也是一种特殊的对象. 可以理解成为一种有功能的,能被执行这种功能的对象. 既然是对象,当然希望对象内能 永久地 隔离的 保存它私有的属性. 闭包就是这一种设计模式.
  • 和函数作用域相违背
    因为JS自带内存回收机制,在这种机制作用下,函数的变量在函数执行完后会被自动回收,那么作为函数这个对象的属性的变量自然无法作为私有变量一样地保存,所以闭包这种模式被设计出来. 既然把函数完全当做对象看待,那么就可以在这个对象中加入对象的方法. 在函数对象的方法里调用对象的属性, 这种被方法所保护的属性就不会被垃圾回收机制处理. 就像一个泡泡包住了这个属性.

从函数式编程角度理解闭包

  • 闭包首先是又函数式编程中引入的,函数式编程有几个

为什么闭包难理解

一开始看闭包的时候也觉得比较困惑,思路全集中在为什么上了. 其实这是闭包被过分解读了. 闭包无非是语JS设计出来的一种使用模式, 只要知道,会用就行了.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 下面就是...
    小翼_b998阅读 101评论 0 0
  • ● 闭包基础 ● 闭包作用 ● 闭包经典例子 ● 闭包应用 ● 闭包缺点 ● 参考资料 1、闭包基础 作用域和作...
    lzyuan阅读 962评论 0 0
  • 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 下面就是...
    鲁uin阅读 308评论 0 2
  • 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 下面就是...
    云端漫记阅读 246评论 0 0
  • 鲜虾粥 一下午都在忙着处理工作上事情,跑这边比较,跑那边参考,拍照汇报必须要做好。给我自己买东西都没有这么认...
    七七行记阅读 234评论 0 0