web-dev-qa-db-ja.com

$ .noop()はjQuery 1.4で実際にどのような目的を果たしますか?

JQuery 1.4に関するリリースノートを注いだところ、偶然出会った $.noop() これは次のとおりです。

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

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

おそらく私はここで深いものを見逃しているかもしれませんが、空の関数を渡すことの実際的な使用は何ですか?

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

47
Sampson

この関数は、jQuery-Devメーリングリストで報告されている$.ajaxを使用した場合の組み込みシステムのパフォーマンスの問題のために提案されました。 thread が表示されます。

基本的に、彼らは空の無名関数をあちこちで宣言するのではなく、この単一の空の関数を導入して使用することを好みました。

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

commit についても紹介されています。

48
CMS

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

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

function(){}とは異なり、_$.noop_を渡しても新しい関数インスタンスは作成されず、メモリが少し節約されます。ただし、関数オブジェクトを変更するために渡そうとしているもの(たとえば、_funcParam.id = 2_)の場合、_$.noop_を渡すと状況が台無しになります。

19
SLaks

実世界の例(ほとんど):

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

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

9
Corin

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

3
Noon Silk

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

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

noop: function() {}

したがって、上記の例のように、空白の関数を使用するすべての場所に適合します。

2
JAL

唯一の論理的な理由は、何かを実行する関数を呼び出し、かつ別の関数を呼び出す場合で、より高いレベルの関数にパラメーター関数を呼び出さずにその機能を実行させたい場合です。

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

0
Kaleb Brasee

関数が引数として関数を渡す必要がある場合はどうでしょうか? do_something($.noop)よりもdo_something(function(){})の方が短いです。

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

... 6文字...

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

0
Nicolás

これは、コールバックが必要な場合のコンテキストでのfunction(){}の純粋な便利/代替です-すぐに使用するつもりはないと思います。

JQueryチームがそれを投入したときはかなり笑いましたが、喜劇の目的にも役立ちます。

0
meder omuraliev

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

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

JQueryの具体的な例はありませんが、.eachブロックまたは.mapブロックで使用すると便利な場合があります。

0
Michael Stum