2016-05-19 19 views

答えて

9

関数を返す関数の価値を理解することが重要です。この手法を使用すると、コード効率を向上させることができます。 JavaScriptの効率と、JavaScriptの強力さの理解が深まりました。
私は、あなたが私がコミュニケーションしようとしていたアイデアを得ることができるように、あなたを見せたいと思います。

のは、次の2つの子オブジェクト、getメソッドとの両方を持つ1つのホストオブジェクトを持っている、とまったく同じ作業を行うが、異なる属性の両方としましょう:同じコードを繰り返す

var accessors = { 
    sortable: { 
     get: function() { 
      return typeof this.getAttribute('sortable') != 'undefined'; 
     } 
    }, 
    droppable: { 
     get: function() { 
      return typeof this.getAttribute('droppable') != 'undefined'; 
     } 
    } 
}; 

は、理想的ではありません

function getAttribute(attr) { 
    return typeof this.getAttribute(attr) != 'undefined'; 
} 

var accessors = { 
    sortable: { 
     get: function() { 
      return getAttribute('sortable'); 
     } 
    }, 
    droppable: { 
     get: function() { 
      return getAttribute('droppable'); 
     } 
    } 
}; 

余分な、中間の機能の実行は、メソッドが呼び出されるたびにありますので、多くの方が、まだ理想的ではないのです。私たちはそれを属性引数を渡し、1つの外部関数を作成することができます。最高の仕事とは何
は、最終的な機能を返される関数である - 取得するために、すべてのコールで、余分な機能の実行を排除するであろう:

function generateGetMethod(attr) { 
    return function() { 
     return typeof this.getAttribute(attr) != 'undefined'; 
    }; 
} 

var accessors = { 
    sortable: { 
     get: generateGetMethod('sortable') 
    }, 
    droppable: { 
     get: generateGetMethod('droppable') 
    } 
}; 

何を上記を参照して機能を返す関数です。各メソッドは、プロパティを取得する独自のメソッドを取得し、各get呼び出し時にオーバーヘッドはありません。

これは、同じようなコードを繰り返さないようにする、本当に便利なテクニックであり、正しく使用すると分かりやすく保守が容易です!

+0

こんにちは、私はこの答えをもう一度読んで、私はまだ混乱していることに気付きました。コード例のv2で「get:​​getAttribute( 'sortable')」があった場合はどうなりますか?同じ結果を返しませんか? "get:generateGetMethod( 'sortable')" – Synia

1

関数を返す場合があります。この状況では、具体的には、角度がフィルタを定義する方法を扱います。外部関数は、注入が必要な依存関係や、指定が必要な変数を処理するためのものです。内部関数は、小さなコレクションを返すためにコレクションに適用される実際のフィルターステップです。

1

すべての関数言語、したがってJavaScriptでは** Higher order functions *を使用できます。ここで関数は言語の第1クラスのメンバーとして扱われ、別の関数から返されるか、別の関数にパラメータとして渡されます。

  1. クロージャ:これは、のようなものを使用可能言語に多くの電力を可能クロージャは再び獣の異なる種類であり、コールバックを介した非同期プログラミングに多くの電力を追加します。あなたはここに閉鎖詳細を読むことができます:https://developer.mozilla.org/en/docs/Web/JavaScript/Closures

  2. を抽象化:あなたは機能の特定の部分のみを露出させ機能を返却するときは、常にローカル変数を使用して、それの一部を非表示にすることができます。これは、あなたがをカリー化JavaやC#

  3. のような他の言語のようにpublicprivateアクセス指定子を持たない特徴JavaScriptのような言語で抽象化することができます:あなたは、選択した属性に適用される機能を返すことで、JavaScriptでカリー実装することができます。例えば。パラメータを部分的に適用できるように関数の合計を定義します。 sum(3)(4)

    function sum (a) { 
        return function (b) { 
        return a + b; 
        } 
    } 
    
  4. Factoryパターン:あなただけのための可能なJavaScript言語の他の多くの機能があります

工場としての機能を生成し、機能を使用するために高階関数を使用することができます関数を返す機能

関連する問題