闭包--Closure

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

闭包的概念

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

从设计者的角度理解闭包

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

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

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

为什么闭包难理解

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

你可能感兴趣的:(闭包--Closure)