【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 */ })() // 但是這個也是可以用的  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM