一个作用域可以访问另外一个函数内部的局部变量 ,或者说一个函数(子函数)访问另一个函数(父函数)中的变量。 此时就会有闭包产生 ,那么这个变量所在的函数我们就称之为闭包函数。存在于嵌套的内部函数中,包含被引用变量(函数)的对象。
优点:
闭包因为长期驻扎在内存中,可以重复使用变量,不会造成变量污染。
缺点:
闭包会使函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,可能会导致内存泄露。解决方法是在退出函数之前,将不使用的变量全部删除。
闭包占内存会占别人的吗
闭包占内存会占别人的。闭包会记录当前作用域的变量,即使函数在其他地方被调用,闭包仍然会访问到这些变量。因此,闭包可能会占用大量的内存,这可能会导致其他函数无法获得足够的内存空间
解决:
- 使用函数柯里化(Currying):将一个接受多个参数的函数转换为一系列使用一个参数的函数。这样可以减少内存的使用,因为每个函数只需要记录一个参数。
- 使用闭包时,确保其访问的变量是唯一的,而不是共享的。可以通过将变量作为参数传递给闭包,而不是使用全局变量。
- 在适当的情况下,可以考虑使用事件处理程序和回调函数。这些函数不会占用额外的内存,因为它们只是将事件传递给其他函数。
- 考虑使用函数式编程,这样可以避免使用闭包。函数式编程是一种编程范式,它将计算视为数学公式,而不是使用特定的数据结构。这可以减少内存使用,因为不需要存储额外的数据。