49

jQuery 1.4 に関するリリース ノートを調べたところ、次のような$.noop()ものに出会いました。

説明: 空の関数。(1.4で追加)

何もしない関数を渡したい場合は、この空の関数を使用できます。

おそらく、ここで何か重大なことが抜け落ちているのでしょうが、空の関数を渡すことの実用的な用途とは正確には何なのでしょうか?

コード例を高く評価しました。

4

9 に答える 9

52

$.ajaxこの関数は、jQuery-Dev メーリング リストで報告された、組み込みシステムでの使用時のパフォーマンスの問題により提案されました。スレッドが表示されます。

基本的に、空の匿名関数をあちこちで宣言するよりも、この単一の空の関数を導入して使用することを好みました。

現在、この関数はajaxevent、およびoffsetモジュールで内部的に使用されています。

コミットが導入されたときも見ることができます。

于 2010-01-15T04:10:26.037 に答える
20

関数をパラメーターとして受け入れる関数があり、それを指定するコードがない場合は、 を渡すことができます$.noop

ただし、そもそもパラメーターがオプションではないjQueryのようなケースは考えられません。

書き込みとは異なりfunction(){}、渡し$.noopても新しい関数インスタンスは作成されず、メモリが少し節約されます。ただし、関数オブジェクトを変更するもの (たとえば、funcParam.id = 2) を渡す場合は、渡すと問題$.noopが発生します。

于 2010-01-15T03:44:57.727 に答える
10

実世界の例(ほぼ):

jQuery.fn.myAwesomeAjax = function(url, complete) {
  return jQuery.ajax(url || this.url)
    .complete(complete || jQuery.noop);
};

代わりに使用してくださいfunction (){}

于 2011-06-28T13:01:33.137 に答える
4

おそらく、いくつかの悪い API がパラメーターとして関数を必要とし、その中で何もしたくない場合、これはそれを明らかにするフレームワークでサポートされている方法です。

于 2010-01-15T03:44:35.010 に答える
3

コールバックを必要とするいくつかのプラグインを使用していますが、特定のコールバックを実際に使用したくない部分もあります。そこで、function() {} を入れました。

noop は jQuery ソースで次のように定義されています。

noop: function() {}

したがって、上記の例のように、空の関数を使用する場所ならどこにでも収まります。

于 2010-01-15T03:54:05.740 に答える
0

唯一の論理的な理由は、何かを実行し、別の関数を呼び出す関数を呼び出しており、パラメーター関数を呼び出さずに上位レベルの関数にそのことを実行させたい場合です。

ほとんどの jQuery 関数はオプションでパラメーター関数を受け取るため、パラメーター関数を渡す必要はありません。そうでない関数が 1 つか 2 つあるかもしれません。あるいは、このような動作をするカスタム コードで開発者を支援するためかもしれません。

于 2010-01-15T03:44:05.667 に答える
0

関数が引数として関数を渡す必要がある場合は、おそらく?do_something($.noop)より言うと短いdo_something(function(){})です。

それほどではありませんが...

...6文字...

...ええ、その機能は実際にはかなり役に立たないようです。

于 2010-01-15T03:44:19.223 に答える
0

これは純粋に、コールバックが必要な場所での利便性/代替手段ですfunction(){}。すぐに使用することはないと思います。

jQuery チームがそれを落とし込んだとき、かなり笑ったに違いありませんが、コメディーの目的も果たします。

于 2010-01-15T03:45:14.157 に答える
0

関数を他の関数に提供する関数がある場合に役立ちます。

例: データのリストがあります。各アイテムには、何かを行うボタンがあります。「何か」はアイテムごとに異なります。アイテムを取り込んで関数を返す「FunctionFactory」があります。なんらかの理由でボタンに何かをさせたくない場合、最もクリーンな方法は空の関数を返すことです。これにより、ファクトリが常に関数を返すことがわかっているためです。

jQuery の具体的な例はありませんが、これは .each または .map ブロックで使用すると便利になると思います。

于 2010-01-15T03:49:05.287 に答える