2013-04-16 13 views
12

私は、次のJavaScriptコードに出くわした:_(子供が)どういう意味javascriptで_(variable_name)とは何を意味していますか?

this.removeEdge = function(source, target) { 
    if(!_states[source]) return; 

    var children = _states[source].children, 
     index = _(children).indexOf(target); 
    if(index !== -1) children.splice(index, 1); 
}; 

+0

回答はこちらhttp://stackoverflow.com/questions/4484424/underscore-prefix-for-property-and-method-names-in-javascript – showdev

+3

「_」はJavaScript識別子ですこの場合の[underscore](http://underscorejs.org/)ライブラリ。 –

+0

@showdev:実際には '_()'は、.. well .. '_'と呼ばれる関数への呼び出しです。 –

答えて

18

_は、JavaScriptの有効な変数識別子であり、理論的にはのいずれかを参照することができます。。関数構文で_(...)を使用すると、_が関数であることを意味します。

これは一般にunderscore.jsライブラリで使用されていますが、縮小されたコードを見ているとファイルサイズを節約するために別の1文字の変数名として使用されている可能性があります。提供あなたの例では


indexOf functionコレクションに適用することができるようにunderscore.jsが、コレクションとしてchildrenの治療に使用されていることが表示されます。これは、電話に似ているでしょう:

_.indexOf(children, target); 
+0

私はミニコードを見ていません。 _がパラメータとして子を渡す関数である場合、_の関数定義がないので意味を持ちません。 –

+0

@CharlesGao、ミニコードの発言は一般的なコメントであり、特定の状況には関係しません。このケースでは、コードが、コレクションに対して反復処理を行うユーティリティ関数のためにアンダースコアライブラリを使用しているかのように見えます。 – zzzzBov

+0

意味があります。 :) –

6

これに答えて1つを見つけることができました。 _(変数)ステートメントは変数の周りにアンダースコアをラップします。 「オブジェクト指向と関数スタイル」セクションでthis link

によれば

index = _.indexOf(children, target); 

関数の連鎖を可能にするオブジェクト指向スタイルで書かれている最初のと等価です。次のように彼らの例は次のとおりです。

_(lyrics).chain() 
    .map(function(line) { return line.words.split(' '); }) 
    .flatten() 
    .reduce({}, function(counts, word) { 
    counts[word] = (counts[word] || 0) + 1; 

これらの各関数は、歌詞の連鎖操作は、可変できるように、歌詞をラップアンダースコア関数を返します。

下線の変更履歴:

0.4.0 - 2009年11月7日:_([1、2、3])の地図: すべての下線の機能は、今では同じように、オブジェクト指向のスタイルで呼び出すことができます(...); Marc-AndréCournoyerが提供したオリジナルのパッチ。ラップされたオブジェクトは、複数のメソッド呼び出しによって連鎖させることができます。 Underscoreのすべての関数のソートされたリストを提供する関数メソッドが追加されました。

+0

[_(。)for _lodash_ 4.17.4のドキュメント(https://lodash.com/docs/4.17。明らかに_lodash_と_underscore_、 –

+0

をマージしているようです。(明示的連鎖とは対照的に) "暗黙的連鎖"についての素敵な説明です:[Implicit Function Chaining in Lodash](https://blog.mariusschulz.com/ 2015/05/14/implicit-function-chains-in-lodash)である。 Dat Syntactic Sugar! –

関連する問題