Une des raisons qui fait que les fonctions JavaScript appelées sur apparition d'événements apparaissent de préférence en tête d'une page est que le document pouvant prendre plusieurs secondes (quelquefois beaucoup plus) avant d'être chargé en totalité, l'utilisateur (client) va peut-être interagir avec le document incomplètement chargé. Dans ce cas, il faut absolument que l'événement provoqué par l'utilisateur soit pris en compte dès qu'il se produit.

Si la fonction gérant cet événement n'est pas encore chargée, on peux imaginer trois conséquences aussi fâcheuses les unes que les autres :

l'événement est perdu (non géré et non mémorisé) ;
une erreur intervient, signalant que la fonction appelée n'est pas définie ;
l'utilisateur doit attendre l'achèvement du chargement de la page avant que son action soit prise en compte.

Afin que les gestionnaires d'événements soient chargés avant même que l'utilisateur puisse déclencher leur activation, il faut qu'ils aient été chargés et analysés avant que le contenu visible du document (entre <body> et </body>) commence à apparaître à l'écran. Ils doivent donc bien prendre leur place entre <head> et </head>.