空の括弧を使用した関数の呼び出し、または括弧をまったく使用しない関数の呼び出しは、引数のない関数にとっては重要ではないように思えるかもしれません。ただし、詳しく調べると、微妙な違いがわかります。
次の 2 つの例を考えてみましょう。
window.onload = initAll();
window.onload = initAll;
1 。即時呼び出し:
最初の例では、空の括弧は initAll() 関数を即座に呼び出し、戻り値は window.onload に割り当てられます。 initAll は onload イベントの発生時に実行される必要があるため、通常、これは望ましい動作ではありません。
2.参照の割り当て:
2 番目の例では、initAll 関数自体が window.onload に割り当てられています。これは、load イベントがトリガーされるまで関数は実行されないことを意味します。このアプローチにより、イベント ハンドラーが正しく設定されることが保証されます。
JavaScript では、関数はファーストクラスのオブジェクトです。これは、変数に格納したり、引数として渡したり、プロパティとして割り当てたりできることを意味します。このため、次の構文が有効です:
window.onload = () => initAll();
この場合、呼び出されるとすぐに initAll() を呼び出す匿名関数が作成されます。ただし、この外部関数の参照はまだ window.onload に割り当てられているため、イベント ハンドラーは、load イベントが両方の関数の実行をトリガーするまで待機します。
以上がJavaScript 関数呼び出し: 空の括弧 – 即時呼び出しまたは参照割り当て?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。