2011-07-26 8 views
12

私はJQueryサイトでコードの構成が不明であることがわかりました。どのような奇妙な構文ですか?

function (a,c) { 
    c==null && (c=a,a=null); 
    return arguments.length>0 
     ? this.bind(b,a,c) 
     : this.trigger(b) 
} 

関数の最初の行はどういう意味:いくつかの書式設定した後、それは次のようになりますか?どのようなトリックまたは標準のJSコードの構築ですか?

+5

それは、Java、PHPの標準だ、Javascriptと他の言語 – Tom

+0

についてと縮小されたものではありません。 ** [ここにリンクがあります](http://code.jquery.com/jquery-1.6.2.js)**が開発コピーに追加されました。 – qwertymk

+1

@Tom:[comma operator](http://ecma262-5.com/ELS5_HTML.htm#Section_11.14)は、C言語のシンタックスを持つ他の言語のJavaScriptとは異なります。 – dolmen

答えて

15

ブール値の短絡評価を使用して、最初の評価が真である場合は後半のみを実行するという方法があります。 Perlはこれを一般的に持っています:

<something> or die 

ここで、最初のステートメントが失敗した場合、プログラムは終了します。

これはブール&&の第二部があれば、そして最初の部分のみ場合に実行されるという事実を利用し

if(c==null) { 
    c = a; 
    a = null; 
} 

を書くための醜い方法だ

if (c == null) { c = a; a = null; } 
+1

なぜカンマですか? 'c = a、a = null' –

+2

コンマはセミコロンを必要とせずに両方のコマンドを実行します。 –

+2

これは、*両方の*ステートメントを**単一行**で実行できるようにします。これは、ifステートメントよりも文字の節約になります。 – zzzzBov

12

としてそれを読みます真と評価する。

+1

非常に醜い。そして、多くの開発者には直感的ではありません。それを書いた人を見つけることができますか、それらを蹴る。 –

+10

@Schroedingers Cat:変数には 'a'、' b'、 'c'という名前が付けられています。このコードはおそらくコードマイナーによって生成されています。 [jQueryは現在(https://github.com/jquery/jquery/blob/master/Makefile#L8)[UglifyJS](https://github.com/mishoo/UglifyJS)を使用しているようです。 – dolmen

+1

Uglify?それはたくさん説明しますね。 ; D – Mchl

2

式は2つのJavaScript機能使用:ブール演算子の

その結果、式は同等です:あなたはjQueryのコードを見てするつもりなら、開発のコピーを見て

if (c == null) { 
    c = a 
    a = null 
}