Das ist/war eine Optimierung. gesparte Zeit, wenn nicht ständig im Speicher rumgeschrieben wird (Initialisierung bei Funktionsstart).
Aber mal ganz im Ernst, warum hörst du nicht auf deinen Compiler, welcher dir gesagt haben sollte, dass diese Variable nicht initialisiert ist?
PS: Result wird auch nicht initialisiert.
Hier hast du sogar einen bösen sonderfall, weil es ein String (gemangter Typ) ist.
Nur mit dem Problem, dass das Result (dieser String) nicht dort initialisiert wird, wo du vielleicht denkst.
Hier nicht beim Aufruf der Funktion, sondern beim Aufrufer der Funktion, wo der Speicher für "dieses" Result her kommt. (bei gemagten Typen)
Globale Variablen liegen auf dem Heap, in einem Speicherbereich, welche von Windows bereitgestellt wird, wenn das Modul (EXE oder
DLL) geladen wird.
Ebenso sieht es mit Thread-Variablen aus, wo der Speicherbereich beim erstellen des Threads bereitgestellt wird.
Speicher von Windows, ebenso wie aus VirtualAlloc, wird immer mit 0 initalisiert.
Lokale Variablen liegen aber auf dem Stack, welcher zwar zu Beginn (Program/Thread) zwar auch 0 ist, aber dort wird nie gelöscht
und bei Funktionseintritt auch nicht von Delphi neu geleert.
Außnahme sind gemanagte Typen, wie Variant, Interface, String, dynamische Arrays und neuerdings (bedingt) auch Managed Custom Records.
Grund ist die automatische Speicherverwaltung, welche nur funktionieren kann, wenn es einen definierten Zustand gibt.