闭包的概念:
- 闭包就是能够读取其他函数内部的函数
- 也可以理解为定义在一个函数内部的函数
闭包的用途:
- 读取函数内部的变量
- 让这些变量的值始终保持在内存中
闭包的注意点:
- 由于闭包会使得函数中的变量都被保存,内存消耗很大
- 在IE中可能导致内存泄漏。解决方法是退出函数之前将不使用的局部变量全部删除
- 闭包可以在父函数外部,改变父函数内部的值。(因为在闭包中变量的值始终保持在内存中)容易产生错误, 所以, 如果闭包是对象内部的属性方法时,不要轻易改变闭包父函数内的变量值
使用场景:
- 函数执行前要为执行的函数提供具体参数
- 比如setTimeOut、setInterval、Ajax callbacks、click事件的回调函数
- 把一个函数采用函数引用方式作为setTimeout的参数调用, 此函数执行中需要有参数, 参数无法被传入
- 采用闭包的方式, 因为闭包中的父函数的变量将被保持在内存中
- 使用闭包代替全局变量
- 在函数外访问函数内的属性
- 封装相关的功能集