37

この投稿で、ニック・クレイバーは彼が使用した答えを提供しました:

function(_, id)

このコードは、アンダースコアを使用する前に変数として宣言していません。グーグルとここでの私の検索は、変数自体としてではなく、接頭辞としてのアンダースコアの使用への参照を指しているだけです。それは何をするためのものか?私はニックによる解決策が好きですが、それは私を悩ませます。

4

7 に答える 7

49

変数が「ドントケア」変数であることを示すために使用されるアンダースコアを見てきました。それは問題ではなく、まったく使用されていないことを意味します。

あなたが指摘した場合、それは彼の関数が2つの引数を持っていることを意味するために使用されましたが、彼は2番目の引数しか必要としませんでした。

于 2012-07-10T04:54:26.183 に答える
21

アンダースコアは有効なJS変数名です。上記の例で指定されたパラメーターは_、他の変数として使用できます。

ただし、これは通常、コードの後続の(人間の)読者に、渡されたものはすべて使用されないことを示すために使用されます。(ただし、コードの作成者は悪意のある/無知であり、関数で使用する可能性があります)。

于 2012-07-10T05:00:24.357 に答える
11

初心者として、コメントやその他の回答に散らばっている、この回答に関連する多くの側面を収集することができませんでした。だから、私はそれらを以下に統合しようとします:

まず、前述のコードでは、アンダースコア引数が次のように使用されています。

$(this).val('').attr('id', function(_, id) { return id + i });

ここattrにある関数のjQueryドキュメントから、オーバーロードされた形式が存在します。この形式のは、次のように記述されます。attr.attr( attributeName, function )function

タイプ:Function(整数インデックス、文字列attr)

したがって、2つのパラメーターが必要です。ただし、このコードではid、2番目のパラメーターである。のみが必要です。

さて、JSが関数の引数を処理する方法のために、 JSが(に期待される最初の引数)にfunction(id)マップidするように、それをとして書くことはできません。したがって、作成する関数には2つのパラメーターが必要です。indexfunction

ここで、標準的な規則が機能します。ここで述べたように、

アンダースコア文字(_)は、未使用の関数の引数を示す標準的な方法として使用されます。

ただし、これは単なる慣例であり、規則ではありません。未使用の引数に名前を付けることもできindexますunused。あれは、

$(this).val('').attr('id', function(unused, id) { return id + i });

有効な同等物になります。

したがって、未使用の引数を置き換えるための_のこのような使用法は、同様のオーバーライドされた形式を持つ他のjQuery関数に使用できます。たとえば、この回答では、への呼び出しでアンダースコアが使用されていることがわかります$.text()。確認のために、ここ$.text()に示すように、2つの引数を持つ関数を受け入れるオーバーライドされたフォームがあります。

于 2016-04-18T16:05:07.097 に答える
6

スタイル別に、_通常はプレースホルダー変数として使用されます。スコープで実際には使用されない変数。

于 2012-07-10T04:56:23.797 に答える
2

すべての回答は、これが未使用のパラメータを示すためのコードスタイルの「ハック」であると説明していますが、一般的には悪い習慣です(アイデア)。_親スコープで宣言された変数をオーバーライドします。_これにより、 (たとえばunderscorejsとして)定義するライブラリを使用できなくなります。とにかく変数を宣言するので、それはある種の最適化でさえありません。

_パラメータのわかりやすい名前を使用し、通常の変数と同じように考える必要があります。変数名を短くすることも悪い習慣と見なされます。したがって、この「巧妙なハック」を使用する予定がある場合は、使用しないでください。

于 2017-05-10T11:34:46.700 に答える
1

以前の他のすべてのポスターが言ったように、それが使用されることが期待されない場合には、それはプレースホルダーとして見ることができます。関数が複数の値を返すことができるが、必要な値だけが明示的に定義されている場合、Pythonで似たようなものを見てきました。

例えば

 a, _, c = foo(bar)

この場合、「b」の潜在的な戻り値は無視され(_によってアクセスできます)、「a」と「c」が使用されます。

于 2014-12-04T15:37:22.400 に答える
0

私はいくつかのレガシーコード(定義されていない_で壊れていた)でこのパターンを見ました、そしてそれはこのライブラリを使用することになっていたことがわかりました:

https://underscorejs.org/

于 2022-02-10T16:11:22.003 に答える