在下面的代码中,我试图在用户点击文档时显示警告.由于我用括号做了doAlert(),代码运行时文档加载和警报没有发生任何事件但如果我只是
doAlert
当我点击文档时,它似乎会响应.那么,我是否应该在没有括号的情况下调用javascript中的函数或者这样做的想法是什么.如果我将参数传递给函数怎么办?
<!doctype html>
<html>
<head>
<script>
function doAlert(){
alert("Hello");
}
function init(){
document.onclick = doAlert();
}
window.onload = init();
</script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
如果foo是一个函数,然后bar = foo将这个函数赋值给变量bar,但bar = foo()会立即调用函数及其分配的返回值来bar代替.
事件处理程序通过被赋予一个在事件发生时将被调用的函数来工作.如果您立即运行功能,那么它的返回值必须是要当事件发生时(在这种情况下两者的返回值运行功能doAlert和init为undefined).
小智 7
document.onclick被设置为doAlert 的返回而不是doAlert函数本身.
您的代码应如下所示:
<!doctype html>
<html>
<head>
<script>
function doAlert(){
alert("Hello");
}
function init(){
document.onclick = doAlert;
}
window.onload = init;
</script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
调用函数时,将获得其返回值.
window.onload = init();
Run Code Online (Sandbox Code Playgroud)
这会运行init()并设置window.onload为其返回值undefined.
你需要像这样设置它:
window.onload = init;
Run Code Online (Sandbox Code Playgroud)
现在window.onload设置为该函数init,它将不会运行,直到它需要.
如果你想传递参数,比如你的传递onClick,你可以这样做:
document.onclick = function(){
doAlert('Clicked');
};
Run Code Online (Sandbox Code Playgroud)
这将设置onClick为匿名函数,该函数调用所需的函数.或者,您可以使用闭包:
function doAlert(param){
return function(){
alert(param);
};
};
document.onClick = doAlert('Hello World');
Run Code Online (Sandbox Code Playgroud)
doAlert被调用,onClick被设置为它的返回值,这是一个函数(在这种情况下是一个警告'Hello World').
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |