Hola 
anac: 
Como te dice 
caricatos (

), su script funciona.  
Tienes que cerciorarte de que llamas a 
inicializar_hora() antes que 
mostrar_hora(), sino es lógico y normal que las variables no tengan valor aún:  
 Código PHP:
    var hora_global;
var minuto_global;
var segundo_global;
 
function inicializa_hora() {
    var fecha = new Date();
    hora_global =fecha.getHours();
    minuto_global = fecha.getMinutes();
    segundo_global = fecha.getSeconds();
}
 
 
function mostrar_hora() {
    alert("hora_global = "+hora_global+"\rminuto_global = "+minuto_global+"\rsegundo_global = "+segundo_global);
}
 
mostrar_hora();     // no tienen valor
inicializa_hora();     // inicializamos su valor
mostrar_hora();     // deben tener valor 
    
  Da igual que tus archivos estén dentro de un documento html o uno js, pero sólo has de fijarte en eso: Haberles dado a tus variables valor antes de leerlas (esto incluye tener cuidado con cuándo se ejecutan tus funciones: si es cuando se está cargando la página, o en el 
window.onload o en algún evento disparado).   
También por si acaso revisa que no tocas esas variables de nuevo en el script, no vaya a ser que las vuelvas a inicializar dentro de la función desde la que la llamas o... Este ejemplo devolverá las dos veces 
undefined:  
 Código PHP:
    var yo;
function ini() {
    yo = "paco";
}
function lee() {
    var yo;
    alert(yo);
}
lee();
ini();
lee(); 
    
  Ya que dentro de 
lee() estamos 
declarando de nuevo como variable local la variable global 
yo, luego lo que alertamos es la variable local, a la global no tendremos acceso (únicamente con 
window.yo).   
No se me ocurre qué más decirte, debería funcionar...
Saludos.