La funzione addEventListener aspetta una funzione o un oggetto che implementa EventListener
come secondo argomento, non una chiamata di funzione.
Quando il ()
viene aggiunto a un nome di funzione, si tratta di un'invocazione di funzione anziché della funzione stessa.
Modifica: Come indicato nelle altre risposte e nei commenti, è possibile restituire le funzioni in Javascript.
Quindi, per qualcosa di interessante, potremmo provare quanto segue. Dall'originale myAlert
, siamo in grado di cambiare un po 'per restituire un messaggio diverso, a seconda dei parametri:
function myAlert(msg)
{
return function()
{
alert("Message: " + msg);
}
}
Qui, si noti che la funzione restituisce in realtà una funzione. Pertanto, al fine di invocare tale funzione, sarà richiesto il valore aggiuntivo ()
.
Ho scritto un po 'di HTML e Javascript per utilizzare la funzione di cui sopra. (Chiedo scusa per il mio impuro HTML e Javascript, dato che non è il mio dominio):
<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>
due tasti sono indicati, e ciascuno chiamare la funzione myAlert
con un parametro diverso. Una volta che viene chiamata la funzione myAlert
, essa stessa restituirà un altro function
in modo che debba essere invocato con un set aggiuntivo di parentesi.
risultato finale è, cliccando sulla Button1
mostrerà una finestra di messaggio con il messaggio Message: Clicked Button1
, mentre cliccando su Button2
mostrerà una finestra di messaggio che dice Message: Clicked Button2
.
Huh. "function() {return 1;}();" è un errore di sintassi, ma "(function() {return 1;}())" non lo è. Silly JavaScript e le tue istruzioni ed espressioni separate ... –
@Simon: "function() {return 1;}();" è un errore di sintassi solo quando non è assegnato a una variabile. –