2分钟理解什么是闭包

58 阅读1分钟

举个栗子

设计一个函数,每执行一次,就累加1

var a = 1;
function fn(){
    a++
    console.log(a)
}
fn() //2
fn() //3
fn() //4

这样使用全局变量的弊端:

  1. 占用内存
  2. 任意函数都可以随意调用,会污染环境

于是我们试着换一种写法

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

那么什么闭包是,要满足以下条内部以下条件

  1. 有函数嵌套
  2. 内部函数调用外部作用域的变量
  3. 返回值是一个函数
  4. 创建一个对象函数,让其长期保留