7.Dart中的函数 箭头函数 匿名函数 闭包

1.箭头函数

箭头函数中只能有一行代码

/*需求:使用forEach打印下面List里面的数据*/
void main(){
    List list=['苹果','香蕉','西瓜'];


    // list.forEach((value){
    //   print(value);
    // });

    list.forEach((value)=>print(value));


    // list.forEach((value)=>{
    //   print(value)
    // });
}
void main(){
/*需求:修改下面List里面的数据,让数组中大于2的值乘以2*/

    List list=[4,1,2,3,4];

   var newList=list.map((value)=>value>2?value*2:value); // 三目表达式

   print(newList.toList());
}

 

2.函数的相互调用

当函数内容较多时,可相互调用,减轻代码量

void main(){
  /*
需求:    1、定义一个方法isEvenNumber来判断一个数是否是偶数  
         2、定义一个方法打印1-n以内的所有偶数
*/
    bool isEvenNumber(int n){
      if(n%2==0){
        return true;
      }
      return false;
    }

    printNum(int n){
        for(var i=1;i<=n;i++){
            if(isEvenNumber(i)){    //调用isEvenNumber方法
              print(i);
            }
        }
    }

    printNum(10);
}

3.匿名方法

void main(){
  var printNum=(){

    print(123);
  };

  printNum();
}

 

4.自执行方法

void main(){
    //自执行方法
    ((){
      print('我是自执行方法');
    })();

    //自执行方法传统参数
    ((int n){
      print(n);
      print('我是自执行方法');
    })(12);

}

 

5.方法的递归

递归即函数调用自身 

void main(){
  //求5的阶乘
  var sum=1;			
  fn(n){
      sum*=n;
      if(n==1){  //退出递归条件
        return ;
      }         
      fn(n-1);
      
  }

  fn(5);      
  print(sum);
}

 

void main(){
//通过方法的递归 求1-100的和

    var sum=0;
    fn(int n){

        sum+=n;

        if(n==0){
          return;
        }
        fn(n-1);
    }

    fn(100);
    print(sum);
}

 

6.闭包  

全局变量与局部变量

1)、全局变量特点:    全局变量常驻内存、全局变量污染全局

2)、局部变量的特点:  不常驻内存会被垃圾机制回收、不会污染全局  

        1.常驻内存        
        2.不污染全局   
 
 产生了闭包,闭包可以解决这个问题.....  

          闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
  
          闭包的写法: 函数嵌套函数,并return 里面的函数,这样就形成了闭包。
void main(){
  fn(){
    var a=123;  /*不会污染全局   常驻内存*/
    return(){			
      a++;			
      print(a);
    };        
  }     
  var b=fn();	
  b();  //124
  b();  //125
  b();  //126

}

   

posted @ 2019-11-22 12:43  The_Chao  阅读(563)  评论(0)    收藏  举报