ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript 関数式の簡単な分析_JavaScript スキル

JavaScript 関数式の簡単な分析_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 15:15:551088ブラウズ

JavaScript 関数式の学習を開始し、以下を注意深く読んでください。

1. 関数を作成する一般的な形式では、コードを実行する前に関数宣言が読み取られるため、関数宣言は関数呼び出しの下に記述できます。

 sayHi();
 function sayHi(){
     alert("Hi!");
}
2. 関数式を使用して関数を作成します。関数を呼び出す前に値を割り当てる必要があります。


 sayHi(); //错误!!函数不存在
 var sayHi=function(){
     alert("Hi!");
}
3. 再帰

一般再帰

function factorial(num){
        if (num <= 1){
          return 1;
        } else {
          return num * factorial(num-1);
        }
      }

arguments.callee は実行される関数へのポインタであり、再帰の実装に使用できます。

function factorial(num){
        if (num <= 1){
          return 1;
        } else {
          return num * arguments.callee(num-1);
        }
      }

4. クロージャ (

クロージャは、別のスコープ 内の変数にアクセスできる関数を指します)。 クロージャを作成する一般的な方法は、別の関数の中に関数を作成することです。関数が実行されると、実行環境と対応するスコープ チェーンが作成されます。クロージャは、それを含む関数内の変数の最後の値のみを取ることができます:

function createFunctions(){
        var result = new Array();
        
        for (var i=0; i < 10; i++){
          result[i] = function(){
            return i;
          };
        }
        
        return result;
      }
      
      var funcs = createFunctions();
      
      //every function outputs 10
      for (var i=0; i < funcs.length; i++){
        document.write(funcs[i]() + "<br />");
      }
上記のコードは 10 個すべてを出力します。これは、各 funcs 関数がアクティブ オブジェクト createFunctions() (関数、オブジェクト、および参照型 Function 型) を保存し、アクティブ オブジェクト createFunctions() には変数 i があるため、各関数はこれを持ちます。変数 i を作成し、createFunctions() 関数が結果を返すと、i は 10 になります。したがって、関数配列の各値は 10 になります。

次のように変換できます:


function createFunctions(){
        var result = new Array();
        
        for (var i=0; i < 10; i++){
          result[i] = function(num){
            return function(){
              return num;
            };
          }(i);
        }
        
        return result;
      }
各匿名関数が呼び出されるとき、i の現在値が num に与えられ、匿名関数内で num のクロージャが作成されて返されます。このように、配列を返す各関数は、num 変数の独自のコピーを持ちます。 (この段落は明確に説明されていません。読者は自分で理解できます。より良い説明方法がある場合は、記事の下にコメントしてください。ありがとうございます)

5. このオブジェクト


  • グローバル関数では、これはウィンドウに相当します。
  • 関数がメソッドとして呼び出された場合、これはそのオブジェクトに相当します。
  • 各関数が呼び出されるとき、この関数は 2 つの特殊変数 (this とarguments) を自動的に取得します。内部関数がこれら 2 つの変数を検索する場合、アクティブなオブジェクトまでのみ検索されます。
6. ブロックレベルのスコープ (プライベートスコープ) を模倣します

以下のように:

function outputNumbers(count){
        for (var i=0; i < count; i++){
          alert(i);
        }
      
        alert(i);  //count
      }

      outputNumbers(5);

Java などの言語では、for の変数 i は使用時に破棄されます。 JavaScript では、outputNumbers を呼び出すとアクティブ オブジェクトが生成され、この i はこのアクティブ オブジェクトに属するため、定義されているため関数内のどこからでもアクセスでき、アクティブ オブジェクト内で共有されます。

匿名関数の構文 (プライベート スコープの作成):


(function(){
 //这里是块级作用域
})();
関数宣言は括弧内に置かれ、それが式であることを示し、すぐに呼び出すことができるようにした後に括弧を追加します。

一時的に変数が必要な場合は、プライベート スコープを使用できます:


function outputNumbers(count){
      
        (function () {
          for (var i=0; i < count; i++){
            alert(i);
          }
        })();
        
        alert(i);  //causes an error
      }
上記のコードでは、i はプライベートであり、アラートはまだアクティブなオブジェクト内にありますが、i が匿名関数 (プライベート ドメイン) の外でアクセスされるとエラーが報告されます。

7. プライベート変数

関数内で定義されたパラメーター、ローカル変数、およびその他の関数はすべて関数のプライベート変数です。例:

function add(num1,num2){
  var sum = num1 + num2;
  return sum; 
}
3 つのプライベート変数があります: num1、num2、sum。関数の内部からはアクセスできますが、外部からはアクセスできません。

特権メソッドはプライベート変数にアクセスできます。簡単に言えば、式を使用してそれにクロージャを与え、クロージャ内の他の関数にアクセスします。


 function Person(name){

        var a=0;
      
        this.getName = function(){
          return name + a;
        };
      
        this.setName = function (value) {
          name = value;
        };
      }

This.getName と this.setName は式メソッドです。 Person インスタンスを作成した後、名前と属性には getName または setName を介してのみアクセスできます。

以上がこの記事の全内容です。皆様の学習に少しでもお役に立てれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。