函数闭包的作用和案例以及函数赋值误区!!!!!!

优点:缓存数据,延长作用域链
缺点:由于缓存,数据不能被及时释放出来,占用内存空间

	 function f1 (){
          var numb = 1;
          console.log(numb);
          return ()=>{
              numb++;
              return numb;
          }
      }
      var rs=f1();//1 返回函数但是没有执行return回来的函数
      console.log(rs());//2 从这里开始没执行var numb = 1;只执行return回来的函数
      console.log(rs());//3
      console.log(rs());//4

一般函数在调用完毕以后,在函数内部定义的变量就被内存回收释放,通过闭包的方式使得变量可以在调用完毕以后依然保存着变量

如果不好理解还有看下面这段代码

	 function f1 (){
          var numb = 1;
          console.log(numb);
          return ()=>{
              numb++;
              console.log(numb)
          }
      }
      f1()();//1 2  //第一个括号相当于先执行外面的f1 第二个括号再执行return回来的函数
      f1()();//1 2  //重复 所以 数据不会缓存 numb始终被重置
      f1()();//1 2
      var rs=f1();//1 相当于把return回来的函数给了rs 但没执行return回来的函数
      rs();//2   后面的就只执行return回来的函数
      rs();//3
      rs();//4

两者的差别就在于后者把return回来的函数赋值给rs以后,之后再执行就只执行return回来的函数。
误区: var rs = f1()意思是先把f1执行一次然后把返回值赋值给rs 而不是把整个函数给rs变量 之前一直以为 rs()执行的是整个f1函数
比如下面这段代码:

 function f (){
           console.log('nihao');
           return 15
       }
       var a = f();//这么写都是让变量来接受返回值的 如果函数没返回值也会执行
       a();//报错 以前我自己以为相当于把f函数整个给了a
      //真正的赋值函数是这样的:
      var b = function f2 (){...}

在函数外部如何调用函数内部的函数?

function f1(){
    var n=999;
    nAdd=function(){n+=1}

    function f2(){
      alert(n);
    }
    return f2;
  }

  var result=f1(); //要先运行一次定义nAdd()才能执行nAdd()
  result(); // 999 
  nAdd();
  result(); // 1000

只要在函数里又有一个函数 那么就会缓存数据

function f1(){
            var n=999;
            nAdd=function(){
                n+=1;console.log(n);
            }
                console.log(n)
   
      }
    
      var result=f1(); //999

      nAdd();// 1000
        nAdd();// 1001
        nAdd();// 1002
        nAdd();// 1003
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值