Puede envolver tryMe
en un cierre.
Por ejemplo:
var f = function(){tryMe('some parameter');};
setTimeout(f, 200);
Aquí, creamos un objeto de función, f
, que llama tryMe
con el parámetro (s) deseado. Luego pasamos f
a setTimeout
. Cuando expira el tiempo de espera, se llamará al f
, que a su vez llamará al tryMe
con los parámetros deseados.
Una palabra de advertencia si desea pasar en los parámetros que pueden cambiar antes de que el tiempo de espera es llamada (por ejemplo, si va a configurar varios tiempos de espera en un bucle for
): tendrá que obligar a dichas variables, así:
var f = function(someParamter){return function(){tryMe(someParameter);};};
setTimeout(f(someParameter), 200);
la razón simple hecho de hacer algo así como
setTimeout(tryMe('some parameter'), 200); //Does not work.
no funciona es porque usted está pasando el resultado de evaluar tryMe
en lugar del objeto función tryMe
sí.
Se ejecuta porque la función se evalúa y el resultado de la función se pasa a 'setTimeout'; La función en sí no se pasa como está esperando. – Marc
No es preciso describir lo que está haciendo como "llamar a una función sin los paréntesis". La función no se llama en la declaración que publicó en su pregunta.Más bien, una * referencia * a su función se pasa a otra función ('setTimeout'), que en algún momento (200 milisegundos después, de hecho) llamará a su función ** con ** paréntesis (conceptualmente). Aún así, lo que estás preguntando aquí es un punto de confusión muy común, y la respuesta es apenas obvia. – Pointy
@Pointy gracias por explicármelo =) – Tsundoku