いくつかのJavaScriptを使用しているときに、不可解な動作に遭遇しました。何が起こっているのかを説明するドキュメントを探しています。
問題は、関数がどのように渡されるかによって、関数が単なるパラメーターであると思われるときに実行される可能性があることです。
簡単な例を次に示します。
function f1()
{
alert('f1');
}
function f2()
{
alert('f2');
}
function f3(a, b)
{
alert('f3');
}
上記の呼び出しの 2 つのバージョン:
f3(f1, f2); // shows 1 alert
f3(f1(), f2()); // shows 3 alerts
上記の f3 の最初の呼び出しでは、f1 および f2 関数が呼び出されず、"f3" のアラートが 1 つ表示されます。f3 関数の 2 回目の呼び出しが呼び出されるため、"f1"、"f2"、"f3" の 3 つのアラートを受け取ります。
実際のコードでは、f3 が f1 と f2 を呼び出すかどうかを決定できるように、最初のバージョンを使用します。それを正しくするのに少しいじりました。
私はこの動作を予期していませんでした。また、括弧の有無にかかわらず、f1 と f2 をパラメーターにするだけでは呼び出されないだろうと考えました。
繰り返しますが、これがどのように機能するかを説明するドキュメントを探しています。