2021-01-31

先跟大家道歉好几天没有学习了,耽误了进度。
JS中的闭包是什么?

<script type="text/javascript">
 function fn1(){
  var a=2
   function fun2(){     #函数内部的函数    
   console.log(a)
   }
   }
闭包是什么? 当一个嵌套的内部函数引用了嵌套外的函数变量(函数)时候,就产生了闭包。fun2里面调用了a的值 这里面函数没有直接运行,也产生了闭包。

闭包产生的条件?
1.函数嵌套
2.内部函数引用了外部函数
3.调用外部函数。

闭包的作用
1.将函数作为另外一个函数的返回值
2.将函数作为实参传递给另外一个函数调用

<script type="text/javascript"
 function fn1(){
    var a=2
    function fn2()
     a++
      conso,e.log(a)
    }
    return fn2
    }
   var f=fn1()
   f()  //3
   f()    //4
   </script>   

1.整个过程中产生了几个闭包?
这里是创建函数 var f=fn1(),只有创建函数才能产生闭包,所以只有一个闭包。
f()
f()
这一部分只是执行。
上面就是将fn2
传递给f就叫做将一个函数值传给另外的值
2.将函数作为实参传递给另外一个函数调用

 function showDelay(msg,time){
   setTimeout(function(){
      alert(msg)},time)
      }
       showDelay("atguigu",2000)

这部分就是传递函数的部分
其中如果把alert(msg)去掉就是没有闭包

作用
1.使函数内部的变量再函数执行完后,仍然存活在内存中(延长了局部变量的生命周期)
2。让函数外部可以操作(读写)导函数内部的数据(变量函数)
比如
f=fun() 如果f没有了闭包就没了
闭包的生命周期
产生:在嵌套的内部函数定义执行完成时就产生了
死亡:在嵌套的内部函数成为垃圾对象时

function f1(){
//此时就已经产生闭包(因为函数提升)
var b=2;
function fn(){
b++;
console.log(b);
}
return fn;
};
var f=f1();
f();
f=null//闭包消失,因为内部函数成为了垃圾对象(没有变量在引用它)
闭包的作用
定义一个特定的js模块
具有特定功能的js文件
将所有函数和功能封装到一个函数内部(私有的)
只向外部暴露一个包换n个方法的对象或函数。
模块的使用者,只需要通过暴露的函数和对象使用
闭包的缺点
1.缺点
函数执行完后,函数内部的局部变量没有释放,占用内存时间会边长
容易造成内存泄漏
2.解决
能不用就不用
及时释放闭包。f=null

内存溢出
解释内存溢出
一种程序运行出现的错误
当程序运行时候需要的内存超过剩余的内存时,就会出现内存溢出的问题
内存泄漏(就是只内存占有一块,可用内存变少了)
占用的内存没有及时释放
内存泄漏积累多了就容易导致溢出
常见的内存泄漏问题:
意外的全局变量
没有及时清理的计时器或回调函数
闭包

实参和形参
形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。

实参出现在主调函数中,进入被调函数后,实参变量也不能使用。
全局变量:

过程体(包括方法function(){},对象Object={})外的所有的变量,不管有没有加var关键字,他都是全局变量。

局部变量:

在过程体内(方法,对象内)的变量,加上var关键字就是局部变量,只能用于本方法或对象内,如果不加var则是全局变量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值