什么是闭包?
解释1:
由于在JS中,变量的作用域属于函数作用域,在函数执行后作用域就会被清理,内存也随之被收回,但是由于闭包是建立在一个函数内部的子函数,由于其可访问上级作用域的原因,即使上级函数执行完,作用域也不会随之销毁,这时的子函数就是闭包。
便拥有了访问上级作用域中的变量的权限,即使上级函数执行后,作用域内的值也不会被销毁。
解释2:
-
父函数里面嵌套子函数,子函数访问父函数的局部变量。
-
通过 return 将子函数暴露到全局作用域,子函数就形成了闭包。
-
通过闭包,父函数的局部变量没有被销毁,可通过闭包去调用,但同时,这个局部变量也不会被全局变量污染。闭包
闭包的优点
1)延长局部变量的生命周期。
2)函数外部能够访问到内部变量。
3)可以避免全局污染。
闭包解决了什么问题?
刚刚解释了什么是闭包,可以知道闭包是可以缓存上级作用域的,那么就使得函数外部打破了“函数作用域”的束缚,可以访问函数内部的变量。