2011-07-19 10 views
0

私はそう呼び出しの意味は何ですか:foo(function(params){...});

(function(arg) {...}(value))(); 

が、何これはどういう意味のように、宣言され、すぐに呼び出される関数を認識しています:

functionName(function(params){...}); 

これはデモ/デモ(の最初の非コード行)であります.jsファイルのAce editorであり、私がまだ遭遇していない最悪のjavascriptコードです。私はそれが本当に良く書かれていないか、私はそれを解読するにはあまりにも初心者であるかどうかを知りたい。この場合

答えて

2

outerFunc(function(params) { ... }) 

outerFuncは、それが定義されています方法を制御するために使用する無名関数、その中にモジュールの定義が含まれています。 the code you're referring toでは、RequireJSdefine関数を使用して、依存関係の指定やコンテキストの実行を含むいくつかのことを行います。

define()はCommonJSモジュールの仕様の一部であり、あなたが使用している別のJavaScriptのプラットフォーム上で異なる方法で実装する必要があります。このコードデザインは合理的ではありません。将来、言語の中核となる提案仕様に従っています。

+0

'define'はcommonJSの一部です。AMD – Raynos

+0

@Raynos Clarified。 –

2

無名関数が関数functionName()に渡されます。

あまり書かれていない、あるいは初心者でもない場合は、このスタイルの正当な使用法である可能性があるので、それは依存しています。

+1

そのコードはかなりよく書かれており、無名関数が別の関数に渡されていることはかなり明白でした。あなたがそれを選んでいないなら、あなたは初心者です。匿名関数を渡すことは、かなり多くのパンとバターJavascriptです。 –

+0

私の問題は、functionName関数( 'define')がどこにあるのか見当たりませんでした。私は[this](http://easeljs.com/docs/DisplayObject.js.html)のコードのように、自分のコードに大きなコメントがあることを好む。今私は自分の立場を傲慢に防衛するのが好きではありませんが、私はこのファイルが過度に畳み込まれていると主張するとき、私が右にいるように感じます。たとえば、要素が作成されたindex.htmlファイルではコールバックが指定されておらず、まったく別のファイルにコールバックが指定されています。これの理由は何ですか?トレースすることは非常に困難です。 – puk

0

これはあまりコード化されていません。これは、関数functionNameに渡される無名関数です。その関数はfunctionNameのローカル名を持ち、その内部で呼び出すことができます。これは多くの場合に非常に便利です。

sort(my_arr, function(obj1, obj2){ 
     return obj1.age*obj1.color - obj2.age*obj2.color; 
    } 
); 

function sort(arr, compare){ 
    // Sorts arr of objects using compare(arr[i], arr[j]); 
} 

これは、あなたがいる限り、発信者は、そのオブジェクトのタイプに比較関数を提供して、すべての可能なオブジェクトのために働く、単一のソート機能sortを実装できるようになります。

0
(function(arg) {...}(value)); 

これは、関数呼び出しではありません。あなたはおそらく(function(params) {...}(value))(someArgs);を意味しました。

functionName(function(params){...}); 

これは、パラメータとしてその無名関数を渡し、functionNameを関数の呼び出しです。

これは(本質的に)同じである。

var f = function(params) { ... }; 
functionName(f); 

または:

function f(params) { ... }; 
functionName(f); 

は検討:

function functionName(f) { 
    f(); 
} 

...が現在呼び出されていること。

+0

私は彼が実際に '(function(arg){...})(value);'を意味したと思います。 – Paulpro

+0

@PaulPRO:ああ、そうです。 –

関連する問題