javascript学習ノート(3)


javascriptの関数は主に以下のいくつかの方面に使用できます.
  • に変数を割り当てます.
  • は、オブジェクトに属性を与えます.
  • は、パラメータとして他の関数に導入される.
  • は、他の関数の戻り値として機能する.
  • は字面量で作成されます. a:function(){} }このような方式で作成しますか?
    javascript関数のパラメータは、定義関数に何らかの形のパラメータが付加されていなくても、任意の多パラメータの着信関数を処理することができます.この原理は、javascriptが処理関数と他のプログラミング言語とは異なり、解釈器が関数に伝達するのは、数セットの内部値と類似しています.
    function sum(){  
        var result = 0;  
        for(var i = 0, len = arguments.length; i < len; i++){  
           var current = arguments[i];  
           if(isNaN(current)){  
               throw new Error("not a number exception");  
           }else{  
               result += current;  
           }  
        }  
         
        return result;  
    }  
    javascriptのスコープは関数のスコープであり、ブロックのスコープがない.
    function func(){
      for(var i=0;i<arguments.length;i++){
        print(arguments[i]);
      
      }
      print(i);
     
    }
    
    func('a','b','c');
    javascriptの関数は局所的な作用領域で動作し、その外部作用領域内の変数と関数にアクセスできます.を選択します.javascriptのスコープは語法のスコープです.関数定義ではなく実行中に決定されます.以下の関数は関数実行時に、初めてstrを印刷します.関数のスコープ内で定義されていない変数strにアクセスするとundefinedが印刷されます.
    var str="global";
    function func(){
      print(str);
      var str="private";
      print(str);
    }
    func();//   undefined private 
    以上のコードセグメントについて詳細に説明します.第一行で定義されたstrは、globalをそれに割り当て、定義時に作用域チェーンの頭であるグローバル作用領域に配置されます.Fncを呼び出すと、javascript解釈器はコールバーを生成します.を選択して、funcでvarで定義された変数を属性として設定し、次にcall objectを役割領域の一番先に置いて、最も優先的なアクセス権を持っています.strにアクセスする時、まずFncの訪問先を調べて、その変数の定義があるかどうかを調べます.見つからない場合は、グローバル作用領域を検索します.コードセグメントでは、funcのcall objectでstrを検索して、strが大域作用領域をカバーするstrを見つけましたが、strを呼び出した時には、この関数体にはまだ割り当て値が定義されていませんので、undefinedが印刷されます.
    javascriptの関数文脈:java/Cでは、メソッドはオブジェクトに依存していますが、javascriptでは関数もオブジェクトであり、対立しています.オブジェクトの属性、方法としてもいいし、他のオブジェクトの関数としてもいいです.関数の上下も変化していますので、関数の中のthis呼び出しも変化します.l方法とappy方法は関数のコンテキストを変えます.
    call方法とappy方法の使用は、以下のコードセグメントで示します.
    var jack={
     name:'jack',
     age:20
    };
    var rose={
     name: 'rose',
     age:19
    };
    function printName(){
      return this.name;
    };
    print(printName.call(jack));//    jack
    print(printName.call(rose));//    rose
    print(printName.apply(jack));
    print(printName.apply(rose));
    一つのパラメータが入ってきた場合、call方法とappy方法は同じです.複数のパラメータが入ってきた場合、call方法とappy方法は異なります.違いは主に以下のコードセグメントで示します.
    function setName(name){this.name=name}; setName.apply(jack,["jack Recpt"]); print(printName.call(jack));
    jack Recptとして印刷します  applyの2番目のパラメータは、関数としてパラメータグループの1つの配列が必要です.
    setName.call(rose,"rose jizz ");print(printName.call(rose));
    ローサジーzcalとして印刷するにはいくつかのパラメータが必要です.パラメータはカンマで区切られます.