【Dart学习】-- Dart之函数声明&&匿名函数&&自执行方法

1.1函数的声明

如下方法 add就是函数声明的代码结构:

void add(x,y){
  print("$x -- $y");
}

void main(){
   add(2,3);
}
  • 关于函数声明,它最重要的一个特征就是函数声明提升,意思是执行代码之前先读取函数声明。这意味着可以把函数声明放在调用它的语句之后。如下代码可以正确执行:
    void main(){
       add(2,3);
    }
    
    void add(x,y){
      print("$x -- $y");
    }

1.2函数表达式

函数表达式中有几种不同的语法。最常见和最具代表性的一种如下所示:

void main(){
   var adds = (x,y){
         print("$x -- $y");
        };
   adds(3,5);
}
  • 这种形式看起来好像是常规的变量赋值语句。但是函数表达式和函数声明的区别在于,函数表达式在使用前必须先赋值。所以这段代码执行的时候就会出错
    void main(){
       adds(3,5);
       var adds = (x,y){
             print("$x -- $y");
       };
    }
  • 造成这种现象是因为解析器在向执行环境中加载数据时,解析器会率先读取函数声明,并使其在执行任何代码前可用;至于函数表达式,则必须等到解析器执行到它的所在的的代码行,才会真正的被解析。函数表达式中,创建的函数叫做匿名函数。

2.匿名函数的调用方式

  匿名函数,顾名思义就是没有名字的函数。

  •   第一种调用方式:
      上面的函数表达式中的创建,实际上是创建一个匿名函数,并将匿名函数赋值给变量 add,用 add来进行函数的调用,调用的方式就是在变量 add后面加上一对括号(),如果有参数传入的话就是 add(1,2),这就是匿名函数的一种调用方式。
    void main(){
       var adds = (x,y){
             print("$x -- $y");
            };
       adds(3,5);
    }
  • 第二种调用方式:
    另外一种匿名函数的调用方式是:使用()将匿名函数括起来,然后后面再加一对小括号(包含参数列表)。

    void main(){
       ((x,y){
         print("$x -- $y");
       }(3,5));
    }

    或者(参数小括号写包括匿名函数的在外边)

    void main(){
       ((x,y){
         print("$x -- $y");
       })(3,5);
    }

    以上代码的这种方式就是模仿了块级作用域(通常成为私有作用域),语法如下所示:

    (function(){  
        //这里是块级作用域  
    })(参数);

    以上代码定义并立即调用了一个匿名函数。经函数声明包含在一对圆括号中,表示它实际上是一个函数表达式。而紧随其后的另一对圆括号会立即调用这个函数。

   从上面对于函数和匿名函数的了解,我们引申出来了一个概念,即自执行函数。

3.自执行匿名函数

自执行函数,即定义和调用合为一体。我们创建了一个匿名的函数,并立即执行它,由于外部无法引用它内部的变量,因此在执行完后很快就会被释放,关键是这种机制不会污染全局对象。

  • 下面我们来看下一些比较有趣的自执行函数表达方式:
    // 下面2个括弧()都会立即执行  
    (function () { /* code */ } ()) // 推荐使用这个  
    (function () { /* code */ })() // 但是这个也是可以用的  
原文地址:https://www.cnblogs.com/lxlx1798/p/11045149.html