学习Javascript闭包

224 阅读1分钟

《红宝书》(《JavaScript高级程序设计》)对闭包的定义是:‌有权访问另一个函数作用域中变量的函数。

面试题:谈谈你对闭包的理解

  • 闭包的定义是有权访问另一个函数作用域中变量的函数。例如,在父函数中定义子函数并返回该子函数时,子函数会携带父函数的变量,即使父函数执行完毕后,这些变量仍可通过闭包被访问。
  • 我觉得闭包的核心思想是创建私有化变量,延长变量的生命,例如防抖节流等闭包的应⽤。在防抖函数中,第一次点击的时候,我们会定义一个定时器,如果不采用闭包的话,下次触发函数会重新创建一个新的定时器,两个定时器的引用不同,是没有关联的,使用闭包可以直接在内存中找到之前创建的计时器,调用就可以直接拿到对应的定时器的时间。
  • 如果不是某些特定任务需要使用闭包,在其它函数中创建函数是不明智的,因为闭包在处理速度和内存消耗⽅⾯对脚本性能具有负⾯影响。因为闭包创建的变量会一直存在内存中,需要及时置空,否则会造成内存泄露,影响程序性能。