La función addEventListener espera una función o un objeto que implementa EventListener
como segundo argumento, no es una llamada a la función.
Cuando se agrega ()
al nombre de una función, es una invocación de función en lugar de la función en sí.
Editar: Como se indica en las otras respuestas y en los comentarios, es posible devolver funciones en Javascript.
Entonces, para algo interesante, podríamos intentar lo siguiente. Desde el original myAlert
, podemos cambiar un poco para devolver un mensaje diferente, dependiendo de los parámetros:
function myAlert(msg)
{
return function()
{
alert("Message: " + msg);
}
}
Aquí, el aviso de que la función devuelve realmente una función. Por lo tanto, para invocar esa función, se requerirá el extra ()
.
Escribí un poco de HTML y Javascript para usar la función anterior. (Por favor, disculpe mi HTML y Javascript impuro, ya que no es mi 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>
dos botones se muestran, y cada uno se llame a la función myAlert
con un parámetro diferente. Una vez que se llama a la función myAlert
, devolverá otra function
, por lo que debe invocarse con un conjunto adicional de paréntesis.
resultado final es, al hacer clic en Button1
mostrará un cuadro de mensaje con el mensaje Message: Clicked Button1
, mientras hace clic en Button2
mostrará un cuadro de mensaje diciendo Message: Clicked Button2
.
Huh. "function() {return 1;}();" es un error de sintaxis, pero "(function() {return 1;}())" no lo es. Silly JavaScript y sus declaraciones y expresiones de funciones separadas ... –
@Simon: "function() {return 1;}();" es un error de sintaxis solo cuando no está asignado a una variable. –