JavaScript中的闭包

闭包是JavaScript中的一个重要概念,它是一个函数与其周围状态的组合,允许内部函数访问并保留外部函数的变量。闭包可以通过函数嵌套创建,常用于实现私有变量和防止全局变量污染。同时,闭包在内存管理中扮演角色,但也可能导致内存泄漏。常见应用场景包括私有变量的保护和函数柯里化。
摘要由CSDN通过智能技术生成

引言:JavaScript中的函数是一个对象,也是一等公民.函数既可以赋值给变量,也可以作为函数的参数,同时,还可以作为另一个函数的返回值.那么,在JavaScript中,闭包就是一个函数.

1. 闭包的概念:

        官方理解:闭包是指一个函数与其周围的状态(词法环境)的组合.这个环境包含了在函数声明时所能访问的所有变量和参数,并且在函数执行过程中始终存在.

        通俗理解:闭包就是一个函数,是指一个函数作为另一个函数的返回值.

2. 闭包的写法:

        (1) 函数嵌套函数:闭包必须有函数嵌套函数的结构.

        (2) 内部函数可以访问外部函数的变量:内部函数可以访问外部函数中的变量,即使在外部函数执行完毕后,这些变量仍然可以被访问.

        (3) 外部函数返回内部函数:外部函数必须返回内部函数,才能形成闭包.

*****闭包的经典写法:

<script>
        //变量a和return返回的函数叫做一个闭包
        function fn(){
            let a = 1;
            return function(){
                a++;
                return a;
            }
        }
        //调用fn以后,返回了内部函数
        let newFn = fn();
        console.log(newFn());
        //外部函数可以使用一个函数定义的局部函数和局部变量
        newFn();
    </script>

3. 闭包的原理:

        (1) 垃圾回收机制:自动回收变量占用内存机制.两种算法:(1)标记清除(2)引用计数.

        (2) 作用域链:在函数中使用一个变量的时候,会先在自身作用域中找,找不到就会去父级作用域中,依次类推,直到全局.

4. 闭包的作用:

        (1) 可以让局部变量像全局变量一样常驻永存;同时,也不会污染全局变量的命名空间.

        (2) 产生私有变量,内部函数调用外部函数的局部变量,此时,这个局部变量就会变成内部函数的私有变量.

        (3) 闭包使用不当会造成内存的泄露,想要解决此弊端的话,可以手动将其赋值为null.

5. 闭包的应用场景:

        (1) 私有变量

                使用闭包可以实现变量的私有化,从而避免全局变量的污染.

        (2) 柯里化

                柯里化是指把一个多参函数转化为一个只有一个参数的函数.

                使用闭包可以实现柯里化,从而方便地进行函数组合.

        

        

        

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值