Hallo RR,
- a) Was passiert mit der anonymen Funktion, wenn man den anschließenden Operator nicht setzt?
Der Garbage Collector kommt vorbei und räumt sie weg.
- b) Was passiert mit der anonymen Funktion, wenn man den anschließenden Operator nicht setzt, aber vorher eine globale Variable 'element' erstellt?
Der Garbage Collector kommt vorbei und räumt sie weg… äh, ich verstehe die Frage nicht. Der globale Scope ist doch unabhängig von dem Funktionsscope. Die „globale” Variable hat nichts mit der inneren zu tun.
- c) Was passiert mit der anonymen Funktion, wenn man vorher eine globale Variable 'element' erstellt hat, aber den anschließenden Operator (the_element) trotzdem angibt?
Der Operator ist ()
, das the_element
war nur ein Platzhalter für das Argument; das könnte z. B. var the_element = document.getElementById("autocomplete-input");
sein.
Ansonsten: wie gesagt, durch die beiden unterschiedlichen Scopes ist die innere, lokale Variable nicht nach außen sichtbar und „shadow”ed die äußere Variable. Will heißen: im Funktions-Körper ist die globale Variable nur noch über window.element
erreichbar, über element
nicht mehr:
element = "foo";
(function(element) {
console.log(window.element);
console.log(element);
})("bar");
Ausgabe: foo, bar.
Das nennt man „shadowing” und ist häufig ein Hinweis auf einen Bug, weshalb viele Compiler und Interpreter dafür Warnings generieren; in diesem Fall ist das aber erwünscht und man nutzt den Effekt absichtlich zur Kapselung.
LG,
CK