JavaScript関数浅析


jsでは関数は比較的把握しやすいが、使用状況は最も複雑な技術である.本論文では、以下の点から特徴や使い方を重点的に述べてみます.今後のudateに期待してください.
 
  •  関数の基本的な特徴
  • いくつかの関数を定義する方法とその違いは
  • です.
  • 関数のいくつかの呼び出し方法
  • JavaScriptの匿名関数
  •  
    関数の基本的な特徴:
     1、関数は対象のタイプの一つです.(ECMAScriptには5つの簡単なタイプのUdefined、Null、Boolean、Number、Stringがあります.もう1つの複雑なタイプのObjectがあります.)そして標準的な内蔵タイプFunctの例です.
    ECMA-622書き込み
    function:
    member of the Object type that is an instance of the standard built-in Function struct and that may be invoked as a subroutine.
    function demo() {
    }
    alert(typeof demo);//function,  ,  object
     2、関数が定義されている場合は、パラメータと戻り値が選択されます.
  • 関数のパラメータは、内部で1つの配列(argments)を使用して表され、関数内ではargments[index]によって指定パラメータ
  • を取得することができる.
  • 戻り値が指定されていない場合、自動的にundefined
  • に戻ります.
    3、jsでは、関数は再ロードされていません.2つの名前が同じ関数を定義した場合、この関数名は後の定義者(または上書きと略称します)に属します.
     
    関数の定義
    大きく分けて次の3つになります.
    //1.        
    function demo1(){}
    
    //2.       
    var demo2=function(){};//        ,    js                  
    
    //3.  Function    
    var demo3=new Function("m","n","return m+n;");//   
     
     違い:
     
    第一の定義方式:従来方式であり、詳細には説明しない.
     
    第二の定義方式:比較的特殊ですが、基本的な特徴は第一と似ています.関数がオブジェクトであるため、関数名は実際には関数オブジェクトを指すポインタでもあるので、第二の定義は実質的に同じです.まず匿名関数を定義して、その値を変数に割り当てます.
     
    第三の定義方式:Functionコンストラクタでは、パラメータはそれぞれいくつかの形参と関数の具体的な実現コードである.このように定義すると、2回の解析(ECMAScriptコードを一回解析して、コンストラクタに入ってくる文字列を一回解析する)と、コードの読み取り可能性とスクリプト注入の問題があるので、使用を推奨しない.
     
    js解析器が環境にデータをロードする場合、前の2つの方式は完全に同じではない.
    解析器はまず関数宣言を読み取り、任意のコードを実行する前にアクセスできるようにします.関数式は、解像度が彼のコード行に実行されるまで、本当に解釈されて実行される必要があります.
    alert(demo1(3,4));
    function demo1(m,n){
        return m+n;
    }
    このコードの運行は大丈夫です.最終的な答えは「7」です.
     
    alert(demo2(3,4));
    var demo2=function(m,n){
        return m+n;
    };
    このコードは実行中にエラーが発生します.関数のある文を実行する前に変数demo 2は関数への参照を保存しません.
     
    この違いを除いて、関数宣言と関数表現の文法は実は同等です.
     
     関数のいくつかの呼び出し方法:
    1、従来の方式は、詳細には説明しない.
    2、アプリ
     
    function add(n1, n2) {
    	return n1 + n2;
    }
    //param1:           
    //param2:Array   
    alert(add.apply(this, [ 1, 2 ]));//  ,       
    alert(add.apply(window, [ 1, 2 ]));
     3、コール
     
    function add(n1, n2) {
    	return n1 + n2;
    }
    //param1:           
    //param2:    ,      
    alert(add.call(this,  1, 2 ));
    alert(add.call(window,  1, 2 ));
      基本的にこの2つの呼び出し方法の違いは、2番目のパラメータであり、applyは1つの配列の例に入る必要があり、callはjavaの可変パラメータであり、1つずつ羅列しなければならない.
     
    applyとcallは、使用シーンにおいて、主に関数頼を拡張して動作させるためのスコープであるが、この点については、従来の呼び出し方式では実現しにくい.
     
    var gender = "female";
    var obj = {
    	gender : "male"
    };
    function demo() {
    	alert(this.gender);
    }
    demo(this);//female
    demo.call(window);//  
    demo.call(obj);//male
     callとappyを使って、実際には関数との結合関係を解除しました.あるいは、appyとcallはJavaの反射に似ています.method.invoke(obj,args)