Hallo RR,
Da hier ein impliziter Funktionsaufruf erfolgt, […]
Es ist ein expliziter Funktionsaufruf 😀
wird also auch der Platzhalter (element), der bei der Funktionsdeklaration zum inneren Namensraum gehört, nicht gegen die (globale) Variable (element) ersetzt, die beim expliziten Funktionsaufruf aus dem äußeren Namensraum der Funktion kommen würde.
Ich verstehe nicht so richtig, was du mit dem letzten Teilsatz meinst. Aber auch, wenn ich eine benannte Funktion habe, gilt das Scoping genau so wie hier in diesem Fall:
element = "foo";
function namedFun(element) {
console.log(window.element);
console.log(element);
}
namedFun("bar");
Ausgabe: foo, bar. Der Grund, warum man solche IFEs verwendet, ist halt, dass wirklich gar nichts in den globalen Namensraum leakt. Die Funktion ist anonym, der Parameter gehört zum Scope der Funktion und die lokalen Variablen auch.
LG,
CK