Hola
 
Sí, tienes razón a media.
Fíjate, que a la función se le pasa un argumento, que equivale a la posición del div. Es decir,
como se le envia un "2" estamos haciendo referencia a 
<div id="d"/>DIV 2</div>. 
Además, usamos 
document.getElementsByTagName('div');, para meter en una matriz todos los elementos con ese tag.
En resumen, realmente no estamos trabajando con las id. Pero como es lo que le ocurre a 
@Sipy 
Ahora un caso en el que varios elementos tienen la misma id y name 
 Cita:  <input type="text" name="t[]" id="t[]" value="1" />
<input type="text" name="t[]" id="t[]" value="2" />
<input type="text" name="t[]" id="t[]" value="3" />
    Podemos acceder a cada elemento usando 
getElementsByName. En este caso te daría un arreglo, con lo cual otra vez puedes acceder a cada uno de ellos, sin problemas. Con lo cual otra vez no trabajamos con sus id 
Espero haberme explicado, no soy muy bueno en esto de explicar la teoría