2013-04-04 22 views
10

次のコードは、なぜ2にアラートしますか?私が見ることができる何2つの関数定義の結果がコンマで結ばれているのはなぜですか?

var f = (function x(){ return 1; }, function y(){ return 2; })(); 
alert(f); 

何とかy関数が実行なっているとx機能が無視されていることです。 (私は両方の機能でalertを入れていることを確認してきた、とyでのみalertは私がx機能が全く呼び出されていないことを信じさせるいると呼ばれている)

そして、私はy機能を削除した場合、それは警告します1

何が起こっているのですか?

答えて

14

[OK]を少し分解してみましょう。

2つのファンクションリテラルがあります。次にcomma operatorが使用されています。式(両方の関数)を評価し、最後の式を返します。この式の結果は次のとおりです。function y(){ return 2; }

残りの表現がされることを意味し:var f = (function y(){ return 2; })();

私たちは次のことを変数fに2を返す(()で)それを呼び出すです。

+0

仲間に感謝します、私はそのようなオプションがあったはずです2答えを受け入れる方法を知っていません。だから私はあなたをupvoteします。 –

+0

もう一つの答えも良いです。正直言って、私の答えは最初の数分で、正確に同じリソースにリンクしていますが、引用するのではなく説明しています。 –

+0

私は申し訳ありませんが、私は1つの理由だけで他の回答を受け入れています。それは私の画面上にあります。私は受け入れられた回答があなたより2分早いことがわかります。だから私は何をすべきか分かりません、私は混乱しています:( –

5

あなたがcomma operatorを使用する場合、返される値は、あなたの場合には、最後の要素のことで、Mozillaのドキュメントから

(2を返す)関数y()

カンマ演算子両方のオペランドを評価し(左から右へ) 、第2オペランドの値を返します。

単一の式が必要な場所に複数の 式を含める場合は、コンマ演算子を使用できます。この演算子の最も一般的な使用方法は、 ループの に複数のパラメータを指定することです。

関連する問題