lo que sucede es que setTimeout, al igual que otras funciones, ejecutan el codigo en el contexto global. entonces, cuando intentas usar una variable local de una funcion en setTimeout, el interprete intentara buscar esa variable en el ambito global y por ende, al no estar definida como variable global, se genera error. lo que tienes que hacer es crear una funcion anonima en setTimeout para que se cree un closure de la variable local.
Código:
setTimeout(function(){
// aqui invocas tu funcion con los parametros necesario;
}, 1000);