Web前端必做笔记之一:闭包(一)基本概念

Web前端必做笔记之一:闭包(一)基本概念

 <script>
            //    我们先看看这个
               let a = 10;
               let b = 20;
               function fun(){
                     let a = 30;
                     let c = 40;
                     function fun(){
                           let a = 50;  //内部函数如果使用变量a,他会在当前的作用域下找,有没有a,如果有直接输出,如果在fun中输出b,没有b,就会在上一层找,在全局环境中没有找到,就会报"undefined",这就是作用域链 
                           let d = 60;
                     }
               }
            
            // 闭包:函数嵌套函数,内部函数是闭包
            

               function outerFun(){
                     let  a = 10;
                     function  innerFun(){
                            console.log(a);
                     }
                     return innerFun;  //把这个闭包作为返回值返回才出来
               }
               
               //outerFun(),返回值是这个内部函数

              let  fun = outerFun();    //这里其实就是把innerFun赋值给fun
              fun();  //10  为啥是输出10? 因为a是可以访问外部函数的变量
 </script>             
<script>
//正常情况下,函数执行完成,内部变量会销毁 (销毁:释放内存空间) 


              function  fun(){
                    let a = 10;
                    console.log(a);
              }
              fun()  //执行完成之后,函数里面的局部变量的内存空间就会被释放, 释放就是这个'a'没了

               
              //再看这个
              function outerFun(){
                     let  a = 10;
                     function  innerFun(){
                            console.log(a);
                     }
                     return innerFun;
               }
                           
              let  fun = outerFun();    //这个是执行完了,那里面的10销毁了吗,会发现没有。依然输出10,内存空间有这个变量
              fun();  
                
              //闭包,内部函数没有执行完成,内部函数变量不会被销毁。
</script>

总结

         1.作用域链:底层的函数使用变量时,会在当前作用域下找,若当前作用域下没有,会向上一层一层查找,直至找到全局环境,若全局环境也没有,则报错
          2.闭包:函数嵌套函数,内部函数是闭包
          3.正常情况下,函数执行完成,内部变量会销毁 (销毁:释放内存空间) 
          4.闭包,内部函数没有执行完成,内部函数变量不会被销毁。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值