2020.6面试谈谈闭包理解

闭包基本上面试中都会被问到的一个问题,但是应该怎么回答才能让面试官满意呢,其实这个就看面试官了,这里不多说,先阐述我对闭包的理解。

1、首先闭包定义:闭包就是能够读取函数内部的一个变量的函数。

应用场景:当我们在封装一个通用模块时,在模块中定义一个变量,不想让这个变量污染全局变量并且不会被内存释放的时候,就可以使用闭包;

创建闭包方式:函数A里面创建了另一个函数B,并返回这个B函数,在B里面修改了A函数中定义的变量,这个变量会一直保存在这个闭包形成的环境中,不会被垃圾回收处理。

function A(){
   var n=999;
   return function B(){
     alert(n); // 999
   }
}

2、变量作用域

变量作用域:全局(函数外部)和局部变量,

局部变量:var声明变量只在函数作用域中有效【函数中声明的变量作用域】

没有var声明就会变成全局变量;有var就是局部变量;var具有变量提升的功能

函数可以用来创建函数作用域,函数就像一层半透明玻璃,里面可以看到外面,外面看不到里面的变量

3、函数的生存周期

全局变量:生存周期是永久的,除非我们主动销毁这个全局变量

var声明的局部变量:当退出函数时,他会随着调用函数的结束而随之销毁

闭包函数:当退出函数后,局部变量不会消失,在某个函数中存在

4、闭包的作用:封装变量;延续局部变量的寿命

封装变量因为使用闭包可以访问到函数内部变量

延续局部变量寿命是因为不会随函数调用结束而被垃圾回收掉

5、闭包与内存管理

闭包会造成内存泄露,所以要尽量减少闭包的使用,其实这种说有误的。因为使用闭包是开发者自己定义的,在不用的时候将这个变量置为null就不占内存了;

其次循环应用的问题它会造成内存泄漏,这个主要还是因为浏览器本省的原因,循环引用计数造成的,只要将变量置为null也就没有这个问题了

使用闭包注意

1、由于使用闭包使得函数内部的变量保存在内存中,内存消耗很大,网页性能不好,避免滥用闭包;【解决方法:在退出函数前,将不适用的局部变量全部删除】

2、闭包会在父函数外面,改变父函数内部的变量;所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

 

 

可以参考:https://www.cnblogs.com/shiyou00/p/10598010.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值