一、Dart中的函数定义的几种方式
自定义方法的基本格式:
返回类型 方法名称(参数1,参数2,...){
方法体
return 返回值;
}
1.1.没有返回值,没有参数的函数
void printInfo(){
print('我是一个自定义方法');
}
1.2.有返回值,没有参数的函数
String printUserInfo(){
return 'this is str';
}
1.3.有返回值,有参数的函数(如果不知道返回值是什么类型的情况下,可以不写)
int sumNum(int n){
var sum=0;
for(var i=1;i<=n;i++)
{
sum+=i;
}
return sum;
}
var n1=sumNum(5);
print(n1);
二、可选参数(传入的参数使用中括号包裹起来就代表是可选参数)
String printUserInfo(String username,[int age]){ //行参
if(age!=null){
return "姓名:$username---年龄:$age";
}
return "姓名:$username---年龄保密";
}
三、默认参数(在参数后面直接赋值就代表默认参数)
String printUserInfo(String username,[String sex='男',int age]){ //行参
if(age!=null){
return "姓名:$username---性别:$sex--年龄:$age";
}
return "姓名:$username---性别:$sex--年龄保密";
}
四、命名参数
//命名参数意思就是在调用的时候有参数提示功能;
//命名参数外面需要使用大括号包裹起来.
String printUserInfo(String username,{int age,String sex='男'}){ //行参
if(age!=null){
return "姓名:$username---性别:$sex--年龄:$age";
}
return "姓名:$username---性别:$sex--年龄保密";
}
五、方法当做参数
//方法
fn1(){
print('fn1');
}
//方法
fn2(fn){
fn();
}
//调用fn2这个方法 把fn1这个方法当做参数传入
fn2(fn1);
六.匿名方法
//将函数直接赋值给一个变量,函数没有具体的名字
var printNum=(){
print(123);
};
printNum();
七:闭包
1.全部变量和局部变量的特点:
全局变量特点:
全局变量常驻内存、全局变量污染全局
局部变量的特点:
不常驻内存会被垃圾机制回收、不会污染全局
如果想实现即能常驻内存又能不会污染全局,这个时候就需要使用到闭包了.
2.闭包的写法:
闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
函数嵌套函数,并return 里面的函数,这样就形成了闭包。
3.闭包具体的写法(函数里面嵌套一个函数并且返回的还是一个函数)
fn(){
var a=123; /*不会污染全局 常驻内存*/
return(){
a++;
print(a);
};
}