突然感觉好长时间没更新了,由于最近在写东西,比较的忙所以有点耽误更新面试题啦,那么下来我们言归正传,今天我们就来谈一谈在原生JS中有关闭包的内容。
一、首先我们先要知道什么是闭包?
闭包就是定义在函数内部的函数,想要在包含内层函数之外的函数调用内层函数的时候就会形成闭包。
说通俗点就是在函数里面的函数在包含他的函数外被调用了,这个时候就形成了闭包。
就比如说如下代码:
let fn=(function (){
var count=3;
return function(){
return count++;
}})();
上面我们已经了解了闭包的概念了,那么我就带着大家接着来说说闭包的本质吧!!
闭包的本质:可以这么理解在层函数里面嵌套一个内层函数,内层函数作为外层函数return的返回值。外层函数并且也是一个自调用函数,并且把自己的返回值(也就是内存层函数本身)赋给一个变量,在JS的执行环境中只要使用了这个变量就相当于调用了这个内层函数,并且在这个函数中可以访问到外层函数的变量,而且歪成函数的变量也不会被多次声明,于是这样就形成了闭包。
了解完闭包的概念和本质,那么我们是不是该说说闭包的用处啦!!!
来吧!
闭包的特点:
- 函数嵌套函数
- 函数内部可以引用函数外部的变量
- 参数和变量不会被垃圾回收机制回收
用处:
- 常驻内存会增大内存的使用量
- 读取函数内部的变量
- 这些变量的值始终保持在内存中,不会在外成函数调用后被自动清理
优点:
- 变量长期驻扎在内存中
- 避免全局变量的污染
- 私有成员的存在
缺点:会造成内存泄漏
那么我们延伸一下 什么是内存泄漏?????
指的是在程序中已经动态分配的堆内存由于某种原因程序不能释放或者无法释放,造成系统内存的浪费,导致程序运行速度变慢甚至系统崩溃等后果。
今天的分享到这里就要和大家说再见了
拜拜( • ̀ω•́ )✧