闭包让你可以在一个内层函数中访问到其外层函数的作用域。
可以通俗理解成:闭包让我们有权访问另一个函数作用域中内部变量或数据
闭包产生条件:
(1)外部函数嵌套一个内部函数,且外部函数定义了内部变量
(2)内部函数使用了外部函数的内部变量
闭包的核心作用:使变量可以驻留在内存,不被回收。这是它的优点,也是缺点:处理不当,会造成内存泄漏
内存泄漏,就是一些你访问不到或用不到的变量,还占据着内存空间,不能被再次利用起来
解决办法:使用完成之后,让函数=null
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// return f2 的原因:在js中,只有内部函数能读取外部函数的内部变量或数据,反之不行
// return f2 是为了能在f1中使用f2的变量和数据,与闭包没有关系
function f1(){
var n = 10;
return function f2(){
n++;
console.log(n);
}
}
var result = f1(); // f1函数只会在此时使用一次,后面都是直接执行f2,所以n的初始化只会执行一次
result() // 11
result() // 12
result() // 13
result=null
</script>
</body>
</html>
如果本文对你有帮助,希望能得到你的点赞或收藏或关注,这是对我最好的鼓励;
如你有问题或疑惑,欢迎在评论区写下,必将努力解答;
如本文有误区,希望你不吝赐教,让我们共勉!