js闭包是什么?

一、闭包的定义

闭包是JavaScript中,函数的一种高级应用方式。

二、闭包的三个生成条件

  1. 在函数 A 内部直接或者间接返回一个函数 B。
  2. 在B 函数内部使用着 A 函数的私有变量(私有数据)。
  3. A函数外部有一个变量接受着函数 B 形成了一个不会销毁的函数空间。

三、什么是闭包空间?

  1. 函数内部的函数。
  2. 一个不会销毁的 a 函数的执行空间叫做 闭包空间。
  3. 把函数a里面返回的b 叫做函数a的 闭包函数。
 function a(){
       // 这个num 变量就是函数 a 的私有变量
            var num = 100
            return function b(){
                console.log(num)
            }
        }
        // res接受的 就是函数 a 内部返回的复杂数据类型(函数b)
        // 导致函数a的执行空间不会被销毁
        var res = a()
        // res 随时可以调用
        res()

四、闭包的特点

注:(优点和缺点并存)
1. 延长了变量的生命周期
+ 优点: 因为执行空间不销毁, 变量也没有销毁
+ 缺点: 因为执行空间不销毁, 会一直存在在内存中
2. 可以访问函数内部的私有变量
+ 优点: 利用闭包函数可以访问函数内部的私有变量
+ 缺点: 执行空间不会销毁, 会一直存在在内存中
3. 保护私有变量
+ 优点: 保护私有变量不被外界访问
+ 缺点: 如果向访问, 必须要利用闭包函数

五、闭包总结

  1. 有一个函数A , 在函数A内部返回一个函数B
 //函数A
            function funA(){   
                var int = 100
                //返回值函数B
                return function funB(){ 
                    var num = int
                    return num
                }
            }
  1. 在函数B 中访问函数A 的私有作用域变量
 // 函数B访问函数A的变量
        function funA(){
            var int = 100
            return function funB(){
                // 函数B中访问函数A中定义的变量int
                var num = int
                return num
            }
        }
  1. 在函数A 外部,有变量引用函数B
 // 函数A外部有变量引用函数B
        function funA(){
            var int = 100
            return function funB(){
                var num = int
                return num
            }
        }
        // 调用函数A,执行结果就是函数B
        let f1 = funA()
        // 引用f1(),实际上就是应用函数B
        let f2 = f1()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值