前端面试之谈谈对于闭包的理解

1.什么是闭包?

(1) 闭包是有权访问另一个函数作用域变量的函数
(2) 闭包一般是函数嵌套,一个函数返回另外一个函数,内部函数访问外部函数的变量就形成了一个闭包

2.闭包有什么特性?

(1)封闭性:外界无法访问闭包内部的数据,如果在闭包内声明变量,外界是无法直接访问的;

(2)持久性:一般的函数调用完毕之后,系统自动注销函数,而闭包来说,在外部的函数被调用之后,闭包中的数据依然存在,从而实现对数据的持久使用。

3.闭包的优缺点是什么?

闭包的优点:

(1) 闭包的优点是可以私有化变量,将变量私有化到函数内部,并在私有化的基础上进行数据保持,减少全局变量;
(2) 闭包在防抖节流,函数柯里化;都应用里数据保持这个特性。

闭包的缺点:是容易造成内存泄露,因为闭包创建的变量会一直存在内存中,需要及时置空,否则会造成内存泄露,影响程序性能(垃圾回收机制)

4.闭包常见的应用场景是什么?


 在防抖函数中,第一次点击的时候,我们会let一个time一个定时器,如果不采用闭包的话,下次触发函数会重新创建一个新的定时器,两个定时器的引用不同,是没有关联的,使用闭包可以直接在内存中找到之前创建的计时器,调用就可以直接拿到对应的定时器的时间
 

//防抖

function debounce() {

    let timer;
    //闭包
    
    return function(){
    
        cleaeTimeout(timer);
    
        timer = setTimeout(() = > {
    
            //需要防抖的操作
    
            console.log('防抖成功')
        },500);
    }
}

要理解闭包,必须先理解JS特殊的变量作用域,JS的特殊之处,在于函数内部能够直接读取全局变量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值