Lieber Roadster,
...wäre dann hier die Funktion
getSum()auf den Namesraum der Funktionaddition()begrenzt?
ja.
Aufrufen könnte man diese Funktion von außerhalb der Elternfunktion zwar nicht,
Richtig.
aber könnte es nicht trotzdem unter Umständen zu Konfusionen führen, gleiche Funktionsnamen innerhalb eines Scripts zu verwenden, oder wäre das auf die Art tatsächlich ausgeschlossen?
Wenn im darüberliegenden Scope eine gleichlautende Funktion definiert wurde, dann gilt bei der Notation des Funktionsnamens die im inneren Scope definierte Funktion:
function test () {
var a;
function middle () {
a = 7; // changes a inside test()
function inner () {
var a;
a = 9; // local a
function test () {
a = 100;
}
// call "test" inside "inner"
test(); // changes a inside inner to 100
// call "test" outside "inner" and "middle2"
window.test();
}
}
function middle2 () {
var a = 9; // local a
function middle () {
a = 13; // changes a inside middle2()
}
// call "middle"
middle(); // changes a inside middle2() to 13
}
a = 3; // change a inside test() to 3
}
Es gibt zwei Funktionen namens "middle", eine im Scope von test() und eine im Scope von middle2. Innerhalb von middle2 war eigentlich die Funktion middle aus dem Scope von test schon bekannt, es wird aber eine "lokale" Funktion gleichen Namens angelegt, so dass der anschließende Aufruf "middle()" nun diese lokale Funktion ausführt.
Bei "test" ist es noch klarer: Die äußere Funktion ist im Scope des window-Objektes definiert (default), daher kann sie mit window.test() aufgerufen werden. Die gleichnamige Funktion innerhalb von "inner" ist nur dort verfügbar.
- Ich meine, Browser machen ja zuweilen eigenwillige Sachen... ;)
Die JavaScript-Engines halten sich sehr gut an die in ECMA-Script standardisierten Sachen, wenn es um diese grundlegenden Sprachkonstrukte geht. Mit den verfügbaren Objekten (in anderen Sprachen auch "Klassen" genannt) ist das etwas anderes wie z.B. document.all und dergleichen...
Liebe Grüße,
Felix Riesterer.
"Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)