Gewöhne dir doch jetzt bitte endlich ab, davon auszugehen, dass Scripte so ablaufen, wie du es dir vorstellst - und überprüfe es stattdessen durch Kontrollausgaben o.ä. …!
Und das führt eben in diesem Fall nicht dazu, dass document.getElementById(layer).style.display den Wert “none” liefert.
Die Werte von CSS-Eigenschaften sind über das style-Objekt nur abfragbar, wenn sie zuvor bereits über dieses gesetzt wurden, oder per style-Attribut direkt am Element notiert wurden.
Wenn das Element per Default immer erst mal versteckt ist, dann kann man natürlich auch einfach die Abfragereihenfolge umdrehen.
(Per Default versteckt werden sollte es aber natürlich nur, wenn JS verfügbar ist.)