10

次のコードがアラートを出すのはなぜ2ですか?

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

私が見ることができるのは、何らかの形でy関数が実行され、x関数が無視されていることです。(私はalert両方の関数を入れていることを確認しました. alertinだけyが呼び出されているため、x関数がまったく呼び出されていないと思います)

関数を削除するyと、アラートが表示され1ます。

どうしたの?

4

2 に答える 2

15

わかりました、少し分解しましょう。

(function x(){ return 1; }, function y(){ return 2; })

2 つの関数リテラルです。次にコンマ演算子が使用されます。式 (両方の関数) を評価し、最後のものを返します。この式の結果は次のとおりです。function y(){ return 2; }

つまり、残りの式は次のとおりです。var f = (function y(){ return 2; })();

次に行うことは()、変数 に 2 を返す ( を使用して) それを呼び出すことですf

于 2013-04-04T21:22:11.243 に答える
5

コンマ operatorを使用すると、返される値は最後の要素の値になります。この場合、関数y()(2 を返します)

モジラのドキュメントから:

コンマ演算子は、両方のオペランドを (左から右に) 評価し、2 番目のオペランドの値を返します。

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

于 2013-04-04T21:24:14.200 に答える