闭包作用:封闭数据,提供操作,外部也可以访问函数内部的变量
闭包的基本格式:
外层函数使用内部变量
<script>function order(){let a=10function fn(){console.log(a);}return fn}const fun=order()fun()</script>
简化一下
function order(){let a=10return function fn(){console.log(a);} }const fun=order()fun()//调用fun
闭包应用:实现数据的私有
比如,我们要做个统计函数调用次数,函数调用一次,就++
let count = 1;function fun() {count++console.log(`函数被调用${count}`);}fun()
但是,这个count时全局变量,很容易被修改。
用闭包改进如下
<script>function fn() {let count = 1;function fun() {count++console.log(`函数被调用${count}`);}return fun()}const result =fn()result//2result//3</script>
实现了数据的私有,无法直接修改count。
总结:
1.怎么理解闭包?
- 闭包=内层函数+外层函数的变量
2.闭包的作用?
- 封闭数据,实现数据私有,外部也可以访问函数内部的变量闭包很有用,因为它允许将函数与其所操作的某些数据(环境)关联起来
3.闭包可能引起的问题?
- 内存泄漏