[英]What is wrong with this javascript code
在下面的代碼中,我試圖在用戶點擊文檔時顯示警告。由於我用括號做了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>
如果foo
是一個函數,那么bar = foo
會將該函數賦值給變量bar
,但是bar = foo()
將立即調用該函數並將其返回值賦值給bar
。
事件處理程序通過被賦予一個在事件發生時將被調用的函數來工作。 如果立即運行該函數,則其返回值必須是您希望在事件發生時運行的函數(在這種情況下, doAlert
和init
的返回值都是undefined
)。
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>
調用函數時,將獲得其返回值。
window.onload = init();
這將運行init()
並將window.onload
設置為其返回值undefined
。
你需要像這樣設置它:
window.onload = init;
現在window.onload
設置為函數init
,直到需要它才會運行。
如果你想傳遞參數,比如onClick
,你可以這樣做:
document.onclick = function(){
doAlert('Clicked');
};
這將onClick
設置為匿名函數,該函數調用所需的函數。 或者,您可以使用閉包:
function doAlert(param){
return function(){
alert(param);
};
};
document.onClick = doAlert('Hello World');
doAlert
,將onClick
設置為其返回值,這是一個函數(在這種情況下是一個警告'Hello World'
的函數)。
Javascript中的函數是對象,可以像任何其他變量一樣傳遞。 在您的情況下, doAlert
只是對函數的引用。 為了調用此引用指向的函數,您需要使用括號: doAlert()
。
document.onclick
方法應該是一個函數引用,所以你給它分配一個函數引用,如下所示: document.onclick = doAlert
。 使用語法,將doAlert()
調用的結果分配給document.onclick
,這是不正確的。
得到它了 ? :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.