JavaScript function関数の種類の詳細

3297 ワード

この記事では、一般関数、匿名関数、クローズド関数を紹介します.
目次
  • 一般関数:一般関数の特性を紹介します.同名のカバー、argmentsオブジェクト、標準の戻り値などです.
  • 匿名関数:匿名関数の特性を紹介する:変数匿名関数、名前なし匿名関数.
  • クローズド関数:クローズド関数の特性を紹介します.
  •  
    1.一般関数1.1例
    
    function ShowName(name) {
      alert(name);
    }
     
    1.2 Jsの同名関数の上書き
    Jsでは関数は再ロードされていません.同じ関数名、異なるパラメータ署名の関数を定義します.後ろの関数は前の関数をカバーします.呼び出し時は、後の関数だけ呼び出します.
    
    var n1 = 1;
     
    function add(value1) {
      return n1 + 1;
    }
    alert(add(n1));//         ,  :3
     
    function add(value1, value2) {
      return value1 + 2;
    }
    alert(add(n1));//  :3
     
    
    1.3 argmentsオブジェクト
    argmentsはC〓〓のparamsに類似しています.操作可変パラメータ:着信関数のパラメータ数は定義時のパラメータ数より大きいです.
    
    function showNames(name) {
      alert(name);//  
      for (var i = 0; i < arguments.length; i++) {
        alert(arguments[i]);//  、  、  
      }
    }
    showNames('  ','  ','  ');
    
    1.4関数のデフォルトの戻り値
    関数が戻り値を指定していない場合、デフォルトでは「undefined」が返されます.
    
    function showMsg() {
    }
    alert(showMsg());//  :undefined
      
    
    2.匿名関数2.1変数の匿名関数
    2.1.1変数、イベントに関数を割り当てることができることを説明します.
    2.1.2例
    
    //      ,       、   
    var anonymousNormal = function (p1, p2) {
      alert(p1+p2);
    }
    anonymousNormal(3,6);//  9
    
    2.1.3適用シーン①関数名の汚染を避ける.名前付きの関数を先に宣言して変数やイベントに値を付けると、関数名が悪用されます.
    2.2名前なしの匿名関数
    2.2.1説明は、関数宣言時に、後にパラメータが続くことです.Js構文解析この関数の場合、コードはすぐに実行されます.
    2.2.2例
    
    (function (p1) {
      alert(p1);
    })(1);
    
    2.2.3適用シーン①は一回だけ実行します.ブラウザのロードが完了したら、一回だけ実行して、あとは実行しない機能が必要です.
    3.クローズド関数3.1の説明
     関数Aの内部は関数Bを宣言し、関数Bは関数B以外の変数を参照し、関数Aの戻り値は関数Bの参照とする.関数Bはクローズド関数です.
    3.2例
    3.2.1例1:全体参照と局部参照
    
    function funA() {
      var i = 0;
      function funB() { //    funB
        i++;
        alert(i)
      }
      return funB;
    }
    var allShowA = funA(); //      :    1,2,3,4 
     
    function partShowA() {
      var showa = funA();//      :   1
      showa();
    }
    
    allShowAは大域変数で、関数funAを参照しています.allShowA()を繰り返し実行すると、1,2,3,4などの積算値が出力されます.
    実行関数partShowA()は、内部ではFnAを引用して局部変数shouwaのみを宣言しているので、実行が完了した後、作用領域の関係により、shouwaが占有する資源を放出します.
    クローズドの鍵は、ロールエリアにあります.グローバル変数が占有するリソースは、ページ変換またはブラウザが閉じたときだけ解放されます.var allShowA=funA()の時、allShowAに相当してfunB()を引用して、funB()の中の資源をGCに回収されないで、だからfunA()の中の資源もできません. 
    3.2.2例2:パッケージ関数があります.
    
    function funA(arg1,arg2) {
      var i = 0;
      function funB(step) {
        i = i + step;
        alert(i)
      }
      return funB;
    }
    var allShowA = funA(2, 3); //    funA arg1=2,arg2=3
    allShowA(1);//    funB step=1,   1
    allShowA(3);//    funB setp=3,   4
    
    3.2.3例3:親関数funA内の変数共有
    
    function funA() {
      var i = 0;
      function funB() {
        i++;
        alert(i)
      }
      allShowC = function () {// allShowC      , funB    i
        i++;
        alert(i)
      }
      return funB;
    }
    var allShowA = funA();
    var allShowB = funA();//allShowB   funA,allShowC          , allShowB    i
    
    3.3適用シーン
    ①関数funA内の変数の安全を保証します.外部から直接funAの変数にアクセスできないためです.
    以上が本文の全部です.皆さんの勉強に役に立ちたいです.