乐趣区

关于javascript:JavaScript高级-闭包的作用-及-闭包生命周期

闭包的作用

  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// 闭包死亡(蕴含闭包的函数对象成为垃圾对象)
退出移动版