2012-03-05 25 views
17

Tengo el siguiente JavaScript en MSIE:setTimeout Internet Explorer

setTimeout(myFunction, 1000, param); 

esto parece funcionar en todos los navegadores excepto Internet Explorer. el param simplemente no se reenvía a la función. mirando el depurador, no está definido.

+0

sólo tiene que utilizar una función anónima ... –

Respuesta

32

param en el explorador de Internet especifica si el código en myFunction es JScript, JavaScript o VBScript Ver también: MSDN. No se comporta como otros navegadores.

El siguiente trabajo:

setTimeout(function() { 
    myFunction(param); 
}, 1000); 

La línea anterior no hace exactamente imitan setTimeout en Firefox, etc. Para pasar una variable, no afectado por una actualización posterior a la param variable, utilice:

setTimeout((function(param) { 
    return function() { 
     myFunction(param); 
    }; 
})(param) , 1000); 
+0

gracias! ¿Cuál de los "params" es el que realmente pasó? – clamp

+0

@clamp El 'param' en la parte inferior es la variable original 'param'. 'param' en la parte superior es una variable local para la función autoinvocación. 'param' en el medio resuelve a' param' en la parte superior. –

+0

¡gracias! todo parece funcionar ahora en todos los navegadores, solo algunas herramientas de procesamiento posterior como jshint y google closure compiler se quejan de que esta es una sintaxis no válida. pero supongo que esta debería ser otra pregunta. – clamp

3

Internet Explorer no le permite pasar parámetros como ese. Vas a tener que hacerlo de forma explícita de la función de devolución de llamada:

setTimeout(function(){ 
    myFunction(param); 
}, 1000); 

Presupuesto de MDN:

Tenga en cuenta que el paso de parámetros adicionales a la función en la primera sintaxis no funciona en Internet Explorador.

0

Ese no es un parámetro. Aparentemente, ese último argumento denota el lenguaje de scripting.

Usar una función anónima en su lugar:

setTimeout(function() { 
    myFunction(param); 
}, 1000); 
0

utilizar una función anónima:

setTimeout(function() { myFunction(param) }, 1000); 
0

¿Qué tal esto:

setTimeout(function(){ 
    myFunction(param); 
}, 1000); 
0

puede utilizar el cierre:

setTimeout(function(){myFunction(param)}, 1000);