<script>
/*
闭包:
利用函数不销毁的空间
在函数内部返回一个复杂数据类型
1. 返回一个函数
+ 在这个函数里面使用了外部函数的变量
+ 管 inner 叫做 outer 的闭包函数
闭包的特点:
可以在函数外部访问函数内部的变量
优点: 在函数外部访问
缺点: 函数执行空间不会销毁(占用内存)
延长了变量的生命周期
优点: 延长生命周期
缺点: 函数执行空间不会销毁(占用内存)(内存泄漏)
*/
function outer() {
var num = 100
function inner() {
// 在访问 num 变量
// 我自己没有,就去上一级作用域查找
// 上一级作用域就是 outer
// 拿到的就是 outer 的 num 变量
return num
}
return inner
}
var res = outer() // res 接受的是 inner 这个函数的地址
/*
在内存中开辟了一个 **函数存储空间 xxff00(outer)**
outer()
在内存中开辟了一个 **函数执行空间 xxff11(outer)**
在 xxff11 内部定义了一个变量 num
在 xxff11 内部定义了一个 **函数存储空间 xxff12(inner)**
return inner => return xxff12
全局 res 接受到的就是 xxff11 空间内部的 xxff12 函数存储空间
导致了一个问题: xxff11 这个空间没有销毁,那么 xxff11 里面的 num 也一直留着
从这里开始, 我随时使用 res() ,随是可以获取到 outer 函数内部的变量 num
*/
</script>