什么是闭包 ?
直接上代码
<script>
!function shy(){ // 一个函数
let a = 10 //一个变量
function b (){ // 一个函数
console.log(a); //一个函数的内部访问另一个函数的变量
}
}()
</script>
上面这样的就是一个闭包了 超简单的
我的定义: 函数 和 函数内部能访问到的变量(也叫环境)的总和,就是一个闭包。
之前的理解就是 : 闭包是需要函数套函数,然后 return 一个函数
栗子
function shy(){
var a = 1
function b(){
a++
return a
}
return b
}
var func = b()
func()
之前就是觉得这样的就是一个闭包 : 他是 a 变量和 b 函数就组成了一个闭包(Closure)
但是为什么要函数套函数呢?
是因为需要局部变量,所以才把 a 放在一个函数里,如果不把 a 放在一个函数里,a 就是一个全局变量了,达不到使用闭包的目的了 – 隐藏变量
为什么要returen 函数b呢?
因为如果不 return,就无法使用这个闭包。把 return b改成 window.b = b 也是一样的,只要让外面可以访问到这个 b 函数就行了
所以 return b 只是为了 b 可以被使用,也跟闭包无关.
闭包的作用?
闭包常常用来 间接访问一个变量。也就是 :隐藏一个变量。
如果我们在打怪兽 显示剩多少管血的话
不用闭包 使用全局变量的话
window.xie = 10
这样的话 如果改这些代码 这游戏也就没意思了 卡bug 会封号
那就要局部变量 但是 局部变量的话又不会被人访问得到了
所以 那就搞一个函数 让别人可以可以 ‘间接访问’
代码
!function() { // 一个立即执行函数
let lives = 50 // 一个变量
window.add=function(){ // 这就是一个闭包了
lives += 1 // 另一个函数内部访问
}
window.jian=function(){ // 这也是一个闭包了
lives -= 1 // 也访问了
}
}()
如果其他文件要引入的话 就可以window.add() 来 加血了
找闭包

正是由于 JS 的函数内部可以使用函数外部的变量,所以这段代码正好符合了闭包的定义。而不是 JS 故意要使用闭包
我觉得 这玩意 根本不需要知道闭包这个概念,一样可以使用闭包 之前没听过闭包的时候也这么写的啊 ! 知道这闭包的话 还有点迷糊了… 忘记闭包才是真正的记住了
闭包会造成内存泄漏 ----- 并不会的. 我这网上着了好久 都是差不多的 但是这个说的我能看懂
end…