....pues mira:
http://jsbin.com/axirav/18/edit
...como ves funciona perfectamente, perooooooo...entrando a un nivel mas profundo de Javascript, esto puede llegar a ocasionar problemas de seguridad de la misma forma que lo hace eval();...
entonces, porque funciona??? ...no significa que sea incorrecta esta forma de pasar una función como argumento dentro de SetTimeout y SetInterval, es totalmente valido dentro de Javascript al igual que el uso eval();, peroooo...dependiendo lo que estés desarrollando y el entorno general de tu código, muchas veces no es recomendable su uso...
...entonces, modificando un poco el código, como primer argumento, deberias pasar una referencia a una función que puede ser el nombre de la función, o una variable de referencia o una función anónima...