闭包形成条件
- 有一个A函数,在A函数内部返回一个B函数 ---- 函数嵌套
- 在B函数内部,访问A函数内部私有变量
- 在A函数外部,有一个变量引用返回的B函数
function A() {
let num = 100
return function B() {
console.log('num = ', num)
}
}
let f = A()
f()
- 特点:
- 一 作用域空间不销毁
- 优点: 因为不销毁,变量不会销毁,增加了变量的生命周期
- 缺点: 因为不销毁,会一直占用内存,多了以后就会导致内存溢出
- 二 可以利用闭包,在一个函数外部,访问函数内部的变量
- 优点: 可以在函数外部访问内部数据
- 缺点: 必须要时刻保持引用,导致函数执行栈不被销毁
- 三 保护私有变量
- 优点: 可以把一些变量放在函数里面,不会污染全局
- 缺点: 要利用闭包函数才能访问,不是很方便
闭包隐式定义
let B
function A() {
let num = 100
B = function(){
console.log(num)
}
}
A()
闭包自调用函数
let x = (function(){
let num = 101
return function B(){
console.log(num)
}
})()
let x1 = (function(){
let num = 100
return function B(){
console.log(num)
}
})()