La esegue correttamente tranne nel caso di una dichiarazione di funzione. In quel caso sembra non accorgersi del fatto e passa oltre (la funzione non viene dichiarata).

Per il momento ho creato una specie di sistema di funzioni caricando in un array il codice da eseguire (legato al nome della funzione stessa) e richiamando con eval la parte di codice che mi interessa tramite una funzione lanciatrice.

In sostanza prima popolo l'array:
var funzioni = new Array();
funzioni['stampa'] = "alert('Stampa!')";
funzioni['stampa2'] = "alert('Stampa 2 volte!')";

e poi richiamo la funzione lanciatrice che è qualcosa del genere:
function startFunct(nome){
eval(funzioni[nome]);
}

Svolge egregiamente il suo ruolo, ma mi sembra una soluzione poco pulita. Stavo cercando un sistema per evitare questo rigiro.