Quiero pasar un argumento a una función llamada usando setTimeout
. He encontrado estas tres opciones:¿Cómo puedo pasar un argumento a una función llamada usando setTimeout?
A = 1;
// Method 1: closure things
setTimeout(function() { whatsA(A); }, 100);
// Method 2: third argument (same result with [A])
setTimeout(whatsA, 100, A);
// Method 3: eval
setTimeout('whatsA(' + A + ')', 100);
A = 2;
function whatsA(X) { console.log(X); }
Esto demuestra 2
, undefined
, y 1
en Internet Explorer 9.
Método 1: Claramente, no me gustaría que el argumento que ser cambiado después de pasarlo (ciertamente en el caso de números enteros simples).
Método 2: Esto sería perfecto si solo lo admite Internet Explorer.
Método 3: Esta parece ser la única opción. Pero parece bastante menos bonito que los otros, pasando algo para ser evaluado en lugar de una función.
¿Hay una manera mejor?
Método 3 es el que debe **nunca usar. Y el Método 2 está en desuso, incluso en los navegadores gecko, por lo que incluso sin tener soporte para IE, es casi un no-go. – ThiefMaster