本文主要是介绍JS中闭包,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
相信JS的开发者,对闭包这个知识都比较熟悉,在熟悉的同时可能会有些模糊的不真切感,下面咱们从三个方面来具体加深一下对闭包的理解。
什么是闭包
咱们先看两个比较抽象的理解,闭包是一个函数和其关联环境组成的结构体;闭包是一个函数和该函数周围状态捆绑在一起的组合。直接读这两句话,可以发现虽然对闭包的字面形容不同,但是表达意思一致。
你肯定想知道这么抽象的话语,在代码中的具体体现是什么,答案还是两个方面,广义上,只要在JS中声明一个函数,那该函数就可以称为闭包;狭义上讲,当一个函数对外层作用域中产生访问时,这个函数就是闭包。
也就是说你在js中写的每一个函数在广义上都是闭包,闭包的应用离我们很近。
为什么要闭包
知道什么是闭包之后,可能会有个疑问,就是为什么要闭包?答案是闭包可以提供更多功能逻辑的实现支持,同时也让代码更加简洁,开发者的重复代码降低,函数参数传递的管理更加清晰......
在代码中的直观体现就是,内层函数使用其外层作用域的变量,如果没有闭包,需要把使用到的变量都作为函数参数,想象一下,把所有函数的参数都写上,产生大量重复性工作,费时费力。
闭包导致的问题
很多事物包括都是有利也有弊的,知道闭包是什么和为什么要闭包之后,咱们来看看闭包会导致的问题,由于JS的闭包是通过作用域链实现的,就会出现一种情况,有些对象或者变量,咱们只在前面用到一次,之后一直到代码执行完毕都不会再使用,但是由于相关的对象被保存到作用域链中,没有被清除,这个时候就导致了内存的泄漏。
解决办法就是对这部分对象设置为null,让垃圾回收机制回收。
总结
闭包应用在JS的每一个函数中,理解闭包可以帮助开发者尽快将知识从量变到质变。
这篇关于JS中闭包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!