2

それで私はjavacriptを学び始めました、そして私は関数とコールバックのコーディング規約がこのようなものであることに気づきました(これはjQueryの例ですが、私はこれらをどこでも見ました):

$.getJSON('some/url.json', function(a) {
// do stuff with a here
});

他の言語から来て、私は通常次のように上記を書きます:

function myFunction(myVar){
//do stuff with myVar here
};

$.getJSON('some/url.json', myFunction());

[おそらくより読みやすい]後者ではなく、前者が通常JSでの書き込み方法として好まれるのはなぜですか?

4

3 に答える 3

2

2番目のより明示的な形式を使用する理由はたくさんあります(コメントにリストされている問題を修正すると仮定します)。

  • コールバックとして渡された関数を再利用する
  • その関数に明確な名前を付けて、デバッグを容易にします
  • 機能がシステムで重要なものとして認識されていることを確認してください
  • 単に長すぎて適切に宣言できないため、その機能を分離する

しかし、コールバックとして無名関数が渡される最初の形式は短くて甘いです。関数を再利用する必要がない場合、関数が比較的短い場合、およびシステムでそれほど重要ではない場合は、関数を使用する場所で正確に宣言すると非常に便利です。スコープに別の変数を追加することを避け、その関数が何のためにあるのかを完全に明確にします。

于 2012-07-25T02:42:12.090 に答える
1

それは好ましい方法ではありません。やりたいことは何でもできます。ただし、関数を再利用する必要がある場合は、2 番目のオプションを実行するか、コードを再利用するために次のことを行う必要があります。

// in some accessible context/namespace
App.myCallback = function(a){
...
};

// somewhere else
$.getJSON('url', App.myCallback);
于 2012-07-25T01:29:03.727 に答える
0

最初の例は、匿名関数またはブロックと呼ばれるものです。一度だけ呼び出される場合に使用されます。2 番目の例は、関数を何度も使用する場合です...無名ブロックを何度も繰り返すと、かなりの無駄な入力になります。

于 2012-07-25T01:29:13.337 に答える