¿Cuándo uso paréntesis y cuándo no?

Resuelto Phillip Senn asked hace 13 años • 5 respuestas

¿Cómo es que puedo decir:

var myFunction = function() {
   setTimeout(myFunction, 1000);
}
myFunction();

¿Por qué la llamada de función setTimeoutno requiere paréntesis, pero la última línea sí?

Phillip Senn avatar Nov 01 '11 22:11 Phillip Senn
Aceptado

Cáscara de nuez

  • myFunctionhace referencia a la función
  • myFunction()llama a la función

Mas palabras

setTimeoutespera una referencia de función * como argumento.

Hay circunstancias en las que setTimeout(myFunction(), 1000)podría tener sentido, como si myFunction()devuelve una función, por ejemplo

function myFunction() {
    return function() {
        alert("ohai")
    }
}

// Or

const myFunction = () => () => alert("ohai")

Entonces:

setTimeout(myFunction(), 1000);
  • setTimeoutobtiene el valor de retorno demyFunction
  • myFunctiondevuelve una función (que llama alert)

lo que significa que habrá una alerta cada segundo.

Consulte también ¿Por qué la declaración de función requiere un nombre?

* O una cadena para evaluar, pero se prefiere una referencia.

Dave Newton avatar Nov 01 '2011 15:11 Dave Newton

myFunctiones una función

myFunction()llama a la función y produce cualquier valor que devuelva la función.

El propósito de setTimeout es ejecutar código después de que transcurra un tiempo. Debe pasarle solo la función (para que setTimeout pueda llamar a la función cuando sea apropiado) porque si llama a la función (con el paréntesis) antes de pasarla a setTimeout, se ejecutará ahora en lugar de después de 1 segundo.

hugomg avatar Nov 01 '2011 15:11 hugomg

Cuando usas el paréntesis, dice "llamar a esta función ahora". Entonces, si dice setTimeout(myFunction(),1000);, utilizará el valor de retorno de la función como devolución de llamada para el tiempo de espera. Si el valor de retorno de la función no es en sí mismo una función, obtendrá un error porque intentará ejecutar algo que no es ejecutable después del tiempo de espera (una cadena, un número, indefinido, etc.).

Chris avatar Nov 01 '2011 16:11 Chris

En la línea 2, la función myFunctionno se llama, sino que se pasa como argumento a la setTimeoutfunción, mientras que en la línea 4 myFunctionse llama; Para llamar a una función, siempre hay que utilizar paréntesis, incluso si no hay argumentos.

Luc125 avatar Nov 01 '2011 15:11 Luc125