簡體   English   中英

這個javascript代碼有什么問題

[英]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

事件處理程序通過被賦予一個在事件發生時將被調用的函數來工作。 如果立即運行該函數,則其返回值必須是您希望在事件發生時運行的函數(在這種情況下, doAlertinit的返回值都是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM