JS-前端学习随笔-对于闭包的理解

导读

大家在学习完javaScript基础后,可能会对经常看见一个概念----“闭包”,闭包其实不是什么高深的概念,其实在其他很多的语言中都会有类似于这个闭包的概念,比如java中封装类的概念。接下来我浅聊一下我对于闭包的理解

正文

一、概念:

        闭包的概念简单来说就是函数嵌套函数,其內部函数和外部函数定义的变量共同构成的部分,我们就可以说是闭包。

二、闭包的特性:

        在正常的情况下,函数的内部变量会在函数被调用时开始创建,并在函数执行完毕以后,被销毁掉(释放内存空间),但是闭包的话,当内部函数还没有执行完成时,外部函数的变量不会被销毁

三、闭包的应用场景

        基于上面我们聊到的闭包特性,我们可以拓展下自己的思维。其实呢闭包的使用场景就是想让数据私有化。在有些特别场景下,大家协同开发时,因为大家都可以访问到定义在全局的变量,所以对于全局变量而言是很容易被修改的。而在使用闭包后,这个问题就迎刃而解了,外部依然可以访问这个变量,但是没有办法修改它的值,从而实现数据的私有化,大家可以结合这段代码,来思考这个问题

function fn() {
            let count = 1
            function fun() {
                count++
                console.log(`函数被调用了${count}次`)
            }
            return fun
        }
        const result = fn()
        result()  //2 
        result()  //3
四、闭包可能会内存泄露

        我们所说的闭包不是一定就会引起内存的泄露问题,这不是绝对的。它只是可能会引起内存泄露。比如你在定义一个闭包时根本就没有return暴露出去,就自然不会出现泄露。当然如果外部定义了一个全局变量,并且在外部调用了闭包时,这时就会出现内存的泄露问题

 譬如在这儿,我们定义的全局变量result,因为全局变量不会像局部变量一样销毁(内存释放),所以这里的这个全局变量会连续传导使得变量count出现内存泄露的问题。

总结

闭包是指函数能够访问并使用其词法作用域外部的变量的能力。它利用了函数在定义时所处的作用域,并可以保护变量不受外部干扰。闭包还具有记忆效应,可以记住函数定义时所处的作用域,使得函数在之后的调用中可以使用之前定义的变量和状态。同时,闭包也可以用来实现延迟执行的效果

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值