JS中闭包

  相信JS的开发者,对闭包这个知识都比较熟悉,在熟悉的同时可能会有些模糊的不真切感,下面咱们从三个方面来具体加深一下对闭包的理解。

什么是闭包

  咱们先看两个比较抽象的理解,闭包是一个函数和其关联环境组成的结构体;闭包是一个函数和该函数周围状态捆绑在一起的组合。直接读这两句话,可以发现虽然对闭包的字面形容不同,但是表达意思一致。

  你肯定想知道这么抽象的话语,在代码中的具体体现是什么,答案还是两个方面,广义上,只要在JS中声明一个函数,那该函数就可以称为闭包;狭义上讲,当一个函数对外层作用域产生访问时,这个函数就是闭包。

  也就是说你在js中写的每一个函数在广义上都是闭包,闭包的应用离我们很近。

为什么要闭包

  知道什么是闭包之后,可能会有个疑问,就是为什么要闭包?答案是闭包可以提供更多功能逻辑的实现支持,同时也让代码更加简洁,开发者的重复代码降低,函数参数传递的管理更加清晰......

  在代码中的直观体现就是,内层函数使用其外层作用域的变量,如果没有闭包,需要把使用到的变量都作为函数参数,想象一下,把所有函数的参数都写上,产生大量重复性工作,费时费力。

闭包导致的问题

  很多事物包括都是有利也有弊的,知道闭包是什么和为什么要闭包之后,咱们来看看闭包会导致的问题,由于JS的闭包是通过作用域链实现的,就会出现一种情况,有些对象或者变量,咱们只在前面用到一次,之后一直到代码执行完毕都不会再使用,但是由于相关的对象被保存到作用域链中,没有被清除,这个时候就导致了内存的泄漏。

  解决办法就是对这部分对象设置为null,让垃圾回收机制回收。

总结

  闭包应用在JS的每一个函数中,理解闭包可以帮助开发者尽快将知识从量变到质变。

你可能感兴趣的:(javascript,开发语言,ecmascript)