<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <button id="btn">按鈕</button> <script> var e =document.getElementById("btn"); e.addEventListener("click",demo1) function demo1(){ alert("hello1") } e.addEventListener("click",demo2) function demo2(){ alert("hello2") } </script> </body> </html>
e.addEventListener("click",demo2)中,demo2后面加了括號變成打開頁面直接彈出對話框而不用去點擊按鈕,不加括號則是通過點擊按鈕才觸發事件彈出對話框,我感覺這個問題是個挺常見且也有迷惑性的,也總結一下。
function Fun(){
return 5
}
var a = Fun;
var b = Fun();
首先定義了一個簡單的函數,函數是一種叫做function引用類型的實例,因此函數是一個對象。對象是保存在內存中的,函數名Fun則是指向這個對象的指針。
var a = Fun,這相當於把函數名這個指針拷貝一份給變量a,函數本身並沒有被復制。
但是如果在Fun后面加上括號,就相當於立即執行了,也就是b會直接獲取到函數的返回值。
然后上面代碼的問題是:
事件觸發是要有用戶進行某項操作才會通過事件監聽器調用這個操作對應的某個函數。addEventListener()方法接受三個參數,其中第二個參數就是當事件被觸發時應該執行的函數,如果沒有事件被觸發,那函數肯定不會被調用。如果加上括號,相當於不需要監聽前面的事件就可以觸發。