veramente usare <script> per includere del js è identico a scrivere il js direttamente nel tag.

Ti faccio un esempio di cosa poteva succedere:

codice:
<div id="MyDiv">
Ciao
</div>
<script type="text/javascript">
alert(document.getElementById('MyDiv').innerHTML);
</script>
Questo codice causa l'alert di "Ciao"

Ma se lo metti nella head della pagina, ti ritornerà un errore sulla console bloccando il JS, perché nel momento in cui l'istruzione viene eseguito il browser non ha ancora interpretato la presenza del div che viene chiamato e per JS non esiste.

Personalmente io sconsiglio sempre di usare questo tipo di soluzioni, dato che, come nel tuo caso, sono assai poco portabili, visto che dipendono dalla loro posizione nel codice, il metodo migliore sarebbe lanciare tutte le istruzioni fuori dalle funzioni nell'evento onload della pagina (o nel dom ready, se non ci interessa l'altezza dovuta ad immagini, o media varii):

<script type="text/javascript">
window.onload = function(){
alert(document.getElementById('MyDiv').innerHTML);
}
</script>

In questo modo lo script può essere messo in ogni posizione della pagina che verrà sempre eseguito correttamente.