buenas...
en realidad, se supone que primero se interprete la segunda línea y luego al cabo de un segundo la primera línea. ¿por qué? el código a interpretar de la primera línea está dentro de un string, mientras que la segunda línea está fuera de un string. cuando le pasas un string a setTimeout, javascript lo evalua (eval) y lo convierte como si fuera una función. en cambio, si le pasas directamente instrucciones (como la segunda línea), javascript lo interpreta al momento y el resultado de esa operación es devuelta a setTimeout como la operación a ejecutarse luego de transcurrido el tiempo indicado. en tu ejemplo, estaría ejecutando un objeto Window ya que eso es lo que devuelve self.open, que al fin y al cabo no reproduce ningún resultado. la otra modalidad es pasarle como argumento a setTimeout una función. en dicho caso, setTimeout invoca la función cuando transcurre el tiempo. en el siguiente ejemplo nótese el orden en que se declara los timer y orden en que ejecuta el contenido.
Código:
setTimeout("alert('primer timer declarado, se muestra segundo');", 5000);
setTimeout(function(){
alert('segundo timer declarado, se muestra primero');
}, 1000);