関数ポインターをイベント ハンドラーに渡すときに、関数ブロックを括弧で呼び出すことはできず、その関数の戻り値がイベント ハンドラーに割り当てられることを理解しています。私はこれを試しましたが、それがどのように機能するのか混乱していますか?
window.onload = alert("Hello, World.");
私はこれがどのように機能するかを見ることができます...
window.onload = function () { alert("Hello, World!"); };
リテラル関数は自己呼び出しではなく、戻り値がなく、onclick イベントが呼び出されたときにのみ呼び出されます。
編集1:これで何も達成したくありません。window.onload = alert("Hello, World."); の仕組みを理解したいだけです。完全に動作し、window.onload = show_message("Hello, World."); 動作しませんか?... show_message が実際には関数であることを考慮してください。
編集 2:一部のユーザーは、onload イベント ハンドラーが任意の関数の括弧で動作すると主張しています。関数がイベント ハンドラーを無視して呼び出され、その関数の戻り値がイベント ハンドラーに割り当てられるため、これが正常に機能するとは思いません。ほとんどの関数は何も返さないため、(undefined または null) がイベント ハンドラーに割り当てられます。
以下のコードを見てください。
var button = document.getElementById("button");
function test() {
str = "works";
console.log(str);
}
button.onclick = test;
ボタンの id が割り当てられたボタン要素があるとします。これは、test が括弧で呼び出されていない場合にのみ機能します (button.onclick = test();)。テストは 1 回だけ実行され、未定義が onclick に割り当てられます。
編集 3:関数が呼び出された場合、戻り値がイベント ハンドラーに割り当てられていないようです。console.log を使用すると、常にコンソールに null が出力されます。