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
}

浙公网安备 33010602011771号