Ist der OnLoad-Handler also automatisch global?
Nein, ist ein Listener, wie jeder andere auch. Aber mit ein wenig Überlegung kannst Du Dir das selbst erklären.
Du bindest ein JavaScript, wie dieses ein:
document.addEventListener('DOMContentLoaded', function() {
var _foobar = 200;
});
console.log(_foobar);
Das Ergebnis ist undefined.
Warum? Weil Du Dich nicht im Scope des Listeners befindest. Die Variable wird zwar strukturell scheinbar zuvor deklariert, aber das greift erst, wenn der Content vollständig geladen ist. Bis dahin ist aber die Konsolenausgabe bereits erzeugt worden, weil die außerhalb des Listeners und i.d.R. vor dem vollständigen Laden des Content aufgerufen wurde.
Da aber die onload-Events i.d.R. immer genutzt werden, um das Laden des Content abzuwarten, um dann die Scriptwelle zu fahren, wirst Du fast immer im Scope des onload-Scope sein und deshalb ist dann auch die Variable verfügbar. In äußere Methoden musst Du die dann übergeben:
document.addEventListener('DOMContentLoaded', function() {
var _foobar = 200;
// …Billion lines of Code here
doSomething(_foobar);
});
function doSomething(x) {
console.log(x);
}
Alles anzeigen
Wenn Du also wirklich globale Variablen benötigst, solltest Du die auch global deklarieren:
var _foobar;
document.addEventListener('DOMContentLoaded', function() {
_foobar = 200;
doSomething();
});
function doSomething() {
console.log(_foobar);
}
Alles anzeigen
Das ist aber alles nichts, was Du mit ein bisschen selber testen hättest herausfinden können.