简单理解:闭包就是 = 内层函数 + 外层函数的变量
内层函数 用到了外层函数的变量 所以才会产生了闭包
<script>
function fn(){
let a = 1
function f(){
console.log(a)
}
f()
}
fn()
</script>
概念:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域
闭包的作用:封闭数据,提供操作,外部也可以访问函数内部的变量
外部如何通过闭包去访问内部变量??? 用return即可 一下是闭包的基本形式
<script>
function fn(){
let num = 10
function f(){
console.log(num)
}
return f
}
//fn() === f === function f(){}
//const fun = fn() = function f(){}
const fun = fn()
fun() //调用函数
//第二种写法
function outer(){
const a = 10
return function(){ //返回一个匿名函数
return a
}
}
const fun1 = outer()
console.log(fun1())
</script>
注意:只要是内层函数用到了外层函数的变量 就会产生闭包 闭包 = 内层函数 + 外层函数变量 就会产生闭包
闭包的作用就是:让外部也能访问到内层的变量
闭包的应用
1.统计函数被调用的次数
<script>
//统计函数被调用的次数
function outer(){
let i = 0;
function inner(){
i++
console.log(`函数被调用了${i}次`)
}
return inner
}
console.log(outer())
</script>
通过闭包 实现了数据私有,无法直接修改 i 的值
闭包除非页面被关闭否则不会被垃圾回收 会产生内存泄漏的风险!!!
总结:
1.怎样理解闭包:
闭包 = 内层函数 + 外层函数的变量
2.闭包的作用:
封闭数据,实现数据私有化,外部也可以访问函数内部的变量
闭包很有用,因为他允许将函数与其所操作的某些数据关联起来
3.闭包可能引起的问题
内存泄漏
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)