2012-04-19 11 views
4

私はフェイスブックのJavaScriptのいくつかを読んで、私はの目的を見つけ出すことができませんでした好奇心機能に出くわした:私はを伝えることができる限りこの関数はFacebookのJavaScriptソースで何をしますか?

function bagof(a) { 
    return function() { 
     return a; 
    }; 
} 

を:

  • bagofをパラメータaを受け付ける関数です。
  • bagofは、すぐに無名関数を返します。
  • 返された関数は元のパラメータaを返します。

私はbagofの使用量がこのようなものになるだろうことを前提としています:

newFunction = bagof("This is the data"); 
​console.log(newFunction());​ //Logs "This is the data"​​​​​​​​​​​​ 

ポイントは何ですか? aに渡された変数や関数を直接使用したり保存したりするのはなぜですか?

The source fileは、アプリケーションに多くのユーティリティ関数が含まれているようです。

答えて

4

bagof()メソッドは、定数関数(常に同じ値を返す関数)を作成するファクトリとして使用できます。あなたは、このような文脈で使用する場合でも

Math.random()は(熱心に)一度だけ評価されるためrandomFun()

var randomFun = bagof(Math.random()); 

呼び出しは常に同じ値を返します。私はいくつかのAPIがメソッドを必要とするときに使用されるユーティリティメソッドだと思っています。単純に定数を渡したいだけです。代わりに:

giveMeCallback(function() {return 42}) 

あなたは、単に言うことができる:

giveMeCallback(bagof(42)) 
+0

をので、関数が実際に何かを「行う」が、簡単に他の関数を作成するための速記として機能していないのですか? –

+0

@MichaelJasper:いいえ、副作用がなく、何も計算しません。その唯一の目的は関数を作成すること、[ファクトリメソッドパターン](http://en.wikipedia.org/wiki/Factory_method_pattern) –

関連する問題