Ok, então isso não pode ser considerado as melhores práticas e certamente não funcionou no IE8, mas getElementById não é necessário para obter elementos DOM. Tente.
Considere este trecho:
<body>
<div id="rumpus"></div>
</body>
<script type="text/javascript">
rumpus.innerHTML = "roo";
</script>
Certamente, o rumpus é indefinido e gerará um erro ao tentar acessar um método dentro dele. Mas não. Quando a página é renderizada, tudo o que você vê é “roo” e nenhum erro no console.
Então o que acontece quando há uma variável definida igual ao ID? JavaScript considerará a var, mesmo se definida como inferior, como a variável a ser encontrada e ignorará o DOM.
<body>
<div id="rumpus"></div>
</body>
<script type="text/javascript">
rumpus.innerHTML = "roo";
var rumpus;
</script>
Uncaught TypeError: Cannot set property 'innerHTML' of undefined
Eu tentei isso no IE10, Chrome 29, Firefox 24 e Safari 5 para Windows, todos resultando em sucesso. Não é assim com o IE8. Novamente, isso não deve ser usado como uma prática recomendada, mas pode explicar por que você está obtendo resultados estranhos (como eu) quando seu código não consegue acessar a variável que você pensa que seria (como o meu).