持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情
今日目标
今天的学习目标是学习Dart中的函数的箭头函数,匿名函数,闭包等相关知识
箭头函数
List list = [1,2,3];
list.forEach((value) => print(value));
print('-------');
list.forEach((value) => {
print(value * 2),
print('value is $value')
});
箭头函数后直接跟方法体,这个时候只能写一行表示,也阔以像第二种写法,这个时候就是一个箭头函数,箭头函数内一般也是只可以写一行表达式,多行的话通过,号区分
来个小练习: 打印出1到之间的全部偶数
bool isEven (int num) {
return num % 2 == 0;
}
printEven (int n) {
for (int i=1;i<=n;i++) {
if (isEven(i)) {
print(i);
}
}
}
printEven(10);
如上,首先我们定义了一个函数来判断数是否为偶数。在定义一个函数来使用前面的定义好的函数来判断数是否偶数,是偶数就打印出数。
自执行方法
所谓的自执行方法就是定义了一个方法,不需要主动调用,它自己就会跟随程序的执行而执行
((){
print('这是一个自执行方法');
})();
如上的写法就是一个自执行方法,可以看到并没有主动调用这个函数,控制台也输出了对应的内容
递归
int total = 1;
int fn(int n) {
total *= n;
if (n == 1) {
return total;
}
return fn(n - 1);
};
int res = fn(5);
print('最终结果____$res');
上面我们实现了一个求1到n的累乘的结果的递归函数。
Dart里的递归和js里的实现思路是一样的也是不断调用函数本身直到条件不符合,结束递归。
闭包
先了解两个基础概念
1.全局变量: 全局变量常驻内存,全局变量会造成污染全局
2.局部变量: 局部变量不常驻内存,会被垃圾回收机制自动回收掉,不会对全局变量造成污染。
闭包正是利用了局部变量这一特性,避免我们的函数内的变量被直接暴露出来,但是又可以让变量常驻内存中。
fn(){
int a = 1;
return () {
a++;
print(a);
};
};
var bibao = fn();
bibao();
bibao();
var bibao2 = fn();
bibao2();
上面的fn就是一个闭包函数,变量a常驻内存中,但是bibao和bibao2中的a不会互相影响。
Ending
持续学习,加油,如有不对的地方还请指正,谢谢~~