I det första exemplet returneras undefined eftersom span-elementet inte lästs in ännu. I det andra exemplet, däremot, fungerar det som tänkt.
Genom att placera include-direktivet inom <head></head>, får du alltså se till att skriptet inte refererar till element som ännu inte lästs in (vanligt är att window.onload används).
En tanke med <head> är väl att man där stoppar information som inte skall visas i webbläsaren, t.ex. meta- och css-taggar samt JS-kod för validering m.m. Vill du däremot använda document.write() är ju <head> högst olämplig ;)
Det kanske finns ett finare ord på svenska, men det är väl mestadels som standard att lägga javascript-blocket i head.
Om du ser Peters exempel så kräver ju det att script blocket ligger efter span-taggen.
Alternativt att du lägger det i en window.onload-funktion.