1.闭包是什么?
简单来说就是函数里面套函数,希望在函数之外访问内部函数元素
2.闭包的功能
- 在函数外,访问函数内的值
- 保持引用,不被垃圾回收
2.1 在函数之外不能访问函数内部的元素
<script>
function fn1(){
let n =123;
}
fn1()
console.log(n);
</script>
此时n不能够被访问,因为在函数之外访问不了函数内部元素
2.2 打印出一个匿名函数
<script>
function fn1(){
let n =123;
return function(){
console.log(n);
}
}
//结论 这个被return返回的匿名函数,它就是闭包
console.log(fn1());
</script>
2.3 函数之外访问函数内部的局域变量
<script>
function fn1(){
let n =123;
// 这是一个函数对象 保存在堆空间 对象就是引用传递
return function(){
console.log(n);
}
}
//结论 这个被return返回的匿名函数,它就是闭包
// console.log(fn1());
let f1 = fn1() //将堆内存中的关于匿名函数的引用保存在f1中
f1() //访问fn1内部的匿名函数
</script>