闭包的作用

  1. 应用函数外部的变量在函数执行完后,依然存活在内存中(缩短了局部变量的生命周期
  2. 让函数内部能够操作(读写)到函数外部的数据(变量/函数)

问题:

  1. 函数执行完后,函数外部申明的局部变量是否还存在?

    • 个别是不存在,存在于闭包中的变量能力存在
  2. 在函数内部能间接拜访函数外部的局部变量吗?

    • 不能,然而通过闭包让内部操作它
            function fn1(){                var a = 2                function fn2(){                    a++                    console.log(a)                }                function fn3(){                    a--                    console.log(a)                }                return fn3            }            var f = fn1()            fn1()            f()//1            f()//0

闭包的生命周期

  1. 产生:在嵌套外部函数定义执行完时就产生(不是在调用)
  2. 死亡:在嵌套的外部函数变为垃圾对象时.
            function fn1(){                //此时闭包就曾经产生了(函数晋升,外部函数对象以及创立了)                var a = 2                function fn2(){                    a++                    console.log(a)                }                return fn2            }            var f = fn1()            f()//3            f()//4            f = null//闭包死亡(蕴含闭包的函数对象成为垃圾对象)