Was ist der Unterschied zwischen einem Funktionsaufruf und der Funktion Referenz?
Habe ich die folgende Funktion
function hello() {
alert("hi!");
}
Nehmen Sie dieses Stück code:
var elem = document.getElementById("btn");
elem.onclick = hello;
Meine Frage vielleicht ein bisschen schwer zu verstehen, so mit mir tragen:
Was GENAU unterscheidet DIESES Stück code aus einem normalen Anruf, oder was macht dieses Stück code benötigen eine Referenz auf die variable, Funktion, anstatt einen normalen Aufruf? (hello();
)
Wie kann ich wissen, wo ich bin soll, geben Sie einen Verweis auf die Funktion, und Wann soll ich eigentlich anrufen?
Ich mag mich irren neu in dieser dynamischen Sprachen (gerade begann, mich in python), aber ich denke die Referenz ist, wenn Sie einen alias erstellen möchten, um die Sprach-Funktion und rufen Sie wörtlich, wenn Sie anrufen möchten. (ZB.
var = hello
dann var()
ist das gleiche wie der Aufruf hello()
wo var()
genannt wirdInformationsquelleAutor frrlod | 2013-04-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, die
onclick
Eigenschaft erwartet eine Referenz auf eine Funktion, für die es ausgeführt werden, wenn das element geklickt wird. Normalerweise ist es entweder:oder
(aber natürlich, es ist am besten, um
addEventListener
undattachEvent
)Beachten Sie, wie beide sind Verweise auf Funktionen, nicht aufrufen.
Wenn etwas erwartet, dass eine Referenz, die Sie nicht nennen...Sie eine Referenz zuweisen (erstes Beispiel).
Wenn Sie speziell eine Funktion aufzurufen, rufen Sie es mit
()
(zweites Beispiel). Aber beachten Sie, wie im zweiten Beispiel, es gibt noch eine Referenz auf eine Funktion zugeordnetonclick
- es ist nur eine anonyme Funktion.Wahrscheinlich der wichtigste Teil:
Einige Leute denken, dass Sie dies tun möchten:
Aber das führt sofort die Funktion (wegen der
()
), und weist Ihren Rückgabewert zuonclick
. Es sei denn, die return-Wert ist eine Funktion, dies ist nicht, was Sie wollen.Ich denke, die moral von der Geschichte ist, dass, wenn Sie wollen/müssen etwas ausführen, gerade jetzt, werden Sie die Funktion aufrufen. Wenn die Funktion gewollt ist, für die spätere Verwendung gespeichert oder muss, Sie nicht nennen es.
Haha ja, ich schien es zu untergraben. Versuchen zu denken, wie man erweitern auf mehr
Es ist eine interessante Ecke Fall:
element.onclick = getClickHandler()
Es ist wohl nicht zu offensichtlich, aber ich hatte waren ", es sei denn, der Rückgabewert ist eine Funktion, dies ist nicht, was Sie wollen." Ich wollte nicht zu weit gehen in diesem Fall würde es verwirren den OP
Sicher!!! stackoverflow.com/questions/6348494/addeventlistener-vs-onclick
InformationsquelleAutor Ian
Wollen Sie es JETZT ausführen? Dann nennen Sie es.
a=hello()
bedeutet "Rufenhello()
so schnell wie möglich, und setzen Sie seinen Wert zurück zua
".Auf der anderen Seite
a=hello
bedeutet "a
ist ein alias fürhello
. Wenn Sie anrufena()
erhalten Sie das gleiche Ergebnis wie der Aufrufhello()
"Anwendung der letzteren für Rückrufe, usw., wo Sie wollen, um dem browser mitzuteilen, was Sie wollen, zu geschehen, nachdem ein Ereignis Auftritt. Zum Beispiel möchten Sie vielleicht sagen, "rufen Sie
hello()
wenn der Benutzer auf" (wie im Beispiel). Oder, "Wenn die AJAX Abfrage ein Ergebnis liefert, nennen diecallback()
Funktion die zurückgegebenen Daten".InformationsquelleAutor Manishearth
Tun, müssen Sie die Funktion jetzt ausführen?
Als hinzufügen (), um ihn auszuführen,
Tun, müssen Sie die Funktion verwiesen werden, die, so heißt es später?
Nicht hinzufügen ().
InformationsquelleAutor epascarello
So ziemlich alle Aussagen in JavaScript haben einen Wert zurück. Sofern nicht anders angegeben, sind Funktionen in JavaScript zurück
undefined
wenn Sie aufgerufen. Also, der einzige Kontext, in dem es Sinn machen würde die Funktion aufrufen, die in dieser abtretungserklärung, wenn es wieder eine Funktion:InformationsquelleAutor Wex
Einen Verweis auf Ihre Funktion erforderlich ist irgendwo egal wie es aufgerufen wird. Der Unterschied hier ist, dass Sie nicht explizit aufrufen der
hello
Funktion. Weisen Sie einen Verweis auf die Funktion in derelem
DOM-Knoten istonclick
event-handler, so dass, wennonclick
ausgelöst wird, für diesen Knoten, der Ihre Funktion aufgerufen wird.InformationsquelleAutor Default
Hallo() rufst du die Funktion, die bedeutet, die Funktion wird direkt ausgeführt.
während, wenn Sie haben elem.onclick = Hallo, dies nennt sich callback. Hallo, wo nicht direkt ausgeführt, sondern nur, wenn ein bestimmtes Ereignis ausgelöst wird (in diesem Fall, wenn es ein Klick auf das element)
InformationsquelleAutor wmfairuz