闭包

139 阅读1分钟

闭包形成条件

  1. 有一个A函数,在A函数内部返回一个B函数 ---- 函数嵌套
  2. 在B函数内部,访问A函数内部私有变量
  3. 在A函数外部,有一个变量引用返回的B函数
function A() {
            let num = 100

            //返回一个复杂数据类型
            return function B() {
                console.log('num = ', num)
            }
        }

        let f = A()
        f()


  • 特点:
  • 一 作用域空间不销毁
  • 优点: 因为不销毁,变量不会销毁,增加了变量的生命周期
  • 缺点: 因为不销毁,会一直占用内存,多了以后就会导致内存溢出
  • 二 可以利用闭包,在一个函数外部,访问函数内部的变量
  • 优点: 可以在函数外部访问内部数据
  • 缺点: 必须要时刻保持引用,导致函数执行栈不被销毁
  • 三 保护私有变量
  • 优点: 可以把一些变量放在函数里面,不会污染全局
  • 缺点: 要利用闭包函数才能访问,不是很方便

闭包隐式定义

let B //返回函数被外变量B引用
        function A() {
            let num = 100 
            
            //A函数内部返回B函数(隐式)
            
            B = function(){
                console.log(num) //内部函数访问外部函数私有变量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)
           } 
           
        })()