我了解将函数指针传递给事件处理程序时,您不能使用括号调用功能块,否则该函数的返回值将分配给事件处理程序。我试过这个,我对它是如何工作的感到困惑?
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 事件处理程序可以在任何函数上使用括号。我认为这不会像它应该的那样工作,因为调用该函数时忽略了事件处理程序,并且该函数的返回值被分配给了事件处理程序。大多数函数不返回任何内容,因此(未定义或 null)将分配给事件处理程序。
看看下面的代码。
var button = document.getElementById("button");
function test() {
str = "works";
console.log(str);
}
button.onclick = test;
假设有一个按钮元素,其按钮的 id 分配给它。这仅在未使用括号调用测试 (button.onclick = test();) 时才有效。测试只会运行一次,undefined 将被分配给 onclick。
编辑 3:如果调用函数,看起来返回值没有分配给事件处理程序。当我使用 console.log 时,它总是将 null 写入控制台。