【Dart】函数

声明函数

  • 直接声明
    • Dart中声明函数不需要function关键字
  • 箭头函数
    +Dart中 的箭头函数中,函数体只能写一行且不能带有结束的分号
    +Dart中的箭头函数,只是函数的一种简写形式
  • 匿名函数
  • 立即执行函数
//Dart中声明函数,不需要function关键字
void printInfo(){
  print('Hello ,World');
}
//返回值与函数声明的类型要一致
int getNum(){
//  return 'Hello';//不能返回字符串类型
return 1;
}
//匿名函数
var myPrint =(value){
print(value);
};
List fruits=['苹果','香蕉','猕猴桃'];
fruits.forEach(myPrint);
//箭头函数
 fruits.forEach((element)->{
  print(element)//箭头函数中,不能写结束的分号(;)
});
fruits.forEach((element)=>print(element));

//立即执行函数
((int  n){
 print(n);
})(17);
void main(){
  //调用函数
  printInfo();
}

函数参数

  • 必填参数
    • 参数类型 参数名称
  • 可选参数
    • 放在必选参数后面
    • 通过中括号包裹起来
    • 带默认值的可选参数
  • 命名参数
    • 用大括号包裹起来
    • 调用函数时,命名参数的名称与声明函数中的名称保持一致
  • 函数参数
void main(){
  //必填参数
 String userInfo(String name){
    return '你好,$name';
}
  String res =userInfo('张三');
  print(res);
//同一个作用域中函数名不能重名,这个地方跟java不一样,java可以重载方法

//可选参数
String userInfo(String name,[dynamic age]){
  return '你好,$name,年龄:$age';
}
String res =userInfo('张三',20);
  print(res);
}
//命名参数
String userInfo(String name,{int age =0} ){
  return '你好,$name,年龄:$age';
}
//命名参数调用时,需要与声明时的形参一致
String res =userInfo('张三',age:20);
  print(res);
}
//函数参数
var myPrint =(value){
  print(value);
}
List fruits =['苹果','香蕉','猕猴桃']
//将匿名函数myPrint传递给函数forEach
fruits.forEach(myPrint);

作用域和闭包

  • Dart中闭包的实现方式与JavaScript中完全一致
  • 使用时机:既能重用变量,又保护变量不被污染
  • 实现原理:外层函数被调用后,外层函数的作用域对象(AO)被内层函数引用着,导致外层函数的作用域对象无法释放,从而形成闭包


    image.png

    image.png

下一节异步函数

你可能感兴趣的:(【Dart】函数)