Die addEventListener Funktion erwartet eine Funktion oder ein Objekt EventListener
als das zweite Argument der Umsetzung kein Funktionsaufruf.
Wenn die ()
zu einem Funktionsnamen hinzugefügt werden, ist es ein Funktionsaufruf und nicht die Funktion selbst.
Bearbeiten: Wie in den anderen Antworten und in den Kommentaren angegeben, ist es möglich, Funktionen in Javascript zurückzugeben.
Also, für etwas Interessantes könnten wir folgendes versuchen. Von der ursprünglichen myAlert
, können wir es ein wenig ändern, um eine andere Nachricht zurück, abhängig von den Parametern:
function myAlert(msg)
{
return function()
{
alert("Message: " + msg);
}
}
Hier bemerken, dass die Funktion eine Funktion tatsächlich zurückgibt. Um diese Funktion aufzurufen, wird daher das Extra ()
benötigt.
Ich schrieb ein wenig HTML und Javascript, um die obige Funktion zu verwenden. (Bitte entschuldigen Sie meinen unreinen HTML und Javascript, da es nicht meine Domain ist):
<script type="text/javascript">
function myAlert(msg)
{
return function()
{
alert("Message: " + msg);
}
}
</script>
<html>
<body>
<form>
<input type="button" value="Button1" onclick="myAlert('Clicked Button1')()">
<input type="button" value="Button2" onclick="myAlert('Clicked Button2')()">
</form>
</body>
</html>
Zwei Schaltflächen angezeigt, und jeder ruft die myAlert
Funktion mit einem anderen Parameter. Sobald die myAlert
-Funktion aufgerufen wird, wird sie selbst eine weitere function
zurückgeben, so dass mit einem zusätzlichen Satz von Klammern aufgerufen werden muss.
Endergebnis ist, wird durch Klicken auf Button1
Message: Clicked Button1
ein Meldungsfeld mit der Meldung zeigen, während Button2
Klick auf ein Meldungsfeld Message: Clicked Button2
sagen zeigen.
Huh. "function() {return 1;}();" ist ein Syntaxfehler, aber "(function() {return 1;}())" ist nicht. Silly JavaScript und Ihre separaten Funktionsanweisungen und Ausdrücke ... –
@Simon: "function() {return 1;}();" ist ein Syntaxfehler nur, wenn er keiner Variablen zugewiesen ist. –