no importa si la ID existe en tu código html. lo que sucede es que el navegador analiza el código html de forma líneal y va construyendo el DOM. cuando el navegador se encuentra con un elemento SCRIPT este le pasa el mando de procesamiento al motor de scripting. si el código javascript intenta acceder al DOM, este sólo podrá trabajar con lo que el navegador haya construido hasta el momento. fíjate el siguiente código y revisa lo que escribe en la consola.
Código:
<script>console.log('antes del elemento: ', document.getElementById('grabme'));</script>
<p id="grabme">elemento con ID "grabme"</p>
<script>console.log('despues del elemento: ', document.getElementById('grabme'));</script>
introducir el código directamente en la consola te funciona porque ya el navegador ha creado el DOM.