Cita:
Iniciado por 50l3r funciona¡¡ nose porque deberia ser
gracias
buenas...
lo que sucede que setTimeout admite dos tipos de datos: string y funcion. cuando se le pasa un string, javascript tiene que evaluarlo como si fuera codigo javascript. o sea, este es como un eval pero con lapso de tiempo. entonces, al evaluarse el codigo es interpretado en el contexto de ambito (scope) global. al codigo evaluado tener referencia a variables locales, el interprete busca las variables en el ambito global y al no encontrarla devuelve error. en cambio, si le pasas una funcion literal donde utilizas esas variables locales, el interprete crea un closure de modo que ya sabe que dicha variable pertenece a un ambito distinto.
javascript closure.