Heim > Fragen und Antworten > Hauptteil
Ich bin heute beim Schreiben von JS auf ein solches Problem gestoßen:
function init() {
var btn = document.getElementById('sort-btn');
btn.onclick = btnHandle();
}
Das Obige ist mein JS-Codeteil. Achten Sie hier auf den zweiten Satz in der Init-Funktion: btn.onclick = btnHandle(); Nach dem Aktualisieren der Seite wird die Funktion btnHandle direkt ausgeführt.
Dann habe ich den Code so geändert
function init() {
var btn = document.getElementById('sort-btn');
btn.onclick = btnHandle;
}
Nach dem Entfernen des () in der btn.onclick = btnHandle();-Anweisung läuft der Code normal, wie ich dachte. Warum ist das so? btnHandle und btnHandle()
漂亮男人2017-05-19 10:22:56
btn.onclick
接受一个函数,代表当 btn 被点击的时候执行这个函数,而你的btnHandle()
代表了执行这个函数,给 btn.onclick
的是他的返回值,当然就先执行了。
下面的写法就代表着,当 btn.onclick
时,执行 btnHandle
函数。
PHPz2017-05-19 10:22:56
说明你刷新页面就会执行init函数,而init函数执行后,在绑定onclick时
这行代码 btn.onclick = btnHandle();
相当于执行btnHandle方法然后把方法的返回值赋值给了btn.onclick。
而btn.onclick = btnHandle;
相当于btn.onclick = function(){xxxxx};
也就是说把btnHandle这个变量的引用赋给了btn.onclick
所以当点击事件触发时会执行btnHandle代表的函数方法