举个栗子
设计一个函数,每执行一次,就累加1
var a = 1;
function fn(){
a++
console.log(a)
}
fn() //2
fn() //3
fn() //4
这样使用全局变量的弊端:
- 占用内存
- 任意函数都可以随意调用,会污染环境
于是我们试着换一种写法
function fn(){
var a = 1;
a++
console.log(a)
}
fn()//2
fn()//2
fn()//2
通过结果我们发现,这样的写法是不行的,每次函数调用完,都会销毁,a永远都是1开始,无法保留
此时,我想到了闭包
function fn(){
var a = 1;
function fa(){
a++
console.log(a)
}
return fa
}
var fb = fn()
fb()//2
fb()//3
fb()//4
那么什么闭包是,要满足以下条内部以下条件
- 有函数嵌套
- 内部函数调用外部作用域的变量
- 返回值是一个函数
- 创建一个对象函数,让其长期保留