Ich habe einen Code für Javascript bekommen, den ich einfach nicht verstehe:
function dmy(d) {
function pad2(n) {
return (n < 10) ? '0' + n : n;
}
return pad2(d.getUTCDate()) + '/' +
pad2(d.getUTCMonth() + 1) + '/' +
d.getUTCFullYear();
}
function outerFunc(base) {
var punc = "!";
//inner function
function returnString(ext) {
return base + ext + punc;
}
return returnString;
}
Wie kann eine Funktion innerhalb einer anderen Funktion definiert werden? Können wir pad2 () von außerhalb meiner () Funktion aufrufen?
Bitte machen Sie etwas Licht darauf. Vielen Dank
javascript
nested-function
Thomas
quelle
quelle
Antworten:
Funktionen sind eine andere Art von Variablen in JavaScript (mit einigen Nuancen natürlich). Das Erstellen einer Funktion innerhalb einer anderen Funktion ändert den Funktionsumfang auf dieselbe Weise wie den Gültigkeitsbereich einer Variablen. Dies ist besonders wichtig für die Verwendung mit Schließungen, um die Gesamtverschmutzung durch globale Namespaces zu reduzieren.
Auf die in einer anderen Funktion definierten Funktionen kann außerhalb der Funktion nur zugegriffen werden, wenn sie an ein Objekt angehängt wurden, auf das außerhalb der Funktion zugegriffen werden kann:
In diesem Beispiel kann die baz-Funktion nach dem
foo
Ausführen der Funktion verwendet werden, da sie überschrieben wirdwindow.baz
. Die Balkenfunktion ist für keinen anderen Kontext als die in derfoo
Funktion enthaltenen Bereiche verfügbar .als anderes Beispiel:
Die
Fizz
Funktion ist als Konstruktor konzipiert, sodass sie beim Ausführenbuzz
dem neu erstellten Objekt eine Funktion zuweist .quelle
Es heißt Schließung .
Grundsätzlich ist die in einer anderen Funktion definierte Funktion nur innerhalb dieser Funktion zugänglich. Kann aber als Ergebnis übergeben werden und dann kann dieses Ergebnis aufgerufen werden.
Es ist eine sehr mächtige Funktion. Weitere Erklärungen finden Sie hier:
javascript_closures_for_dummies.html Spiegel auf Archive.org
quelle
ist äquivalent (oder sehr ähnlich) zu
es sei denn, ich irre mich.
Es ist also nichts Komisches los.
quelle
Funktionsinstanziierung ist innerhalb und außerhalb von Funktionen zulässig. Innerhalb dieser Funktionen sind die verschachtelten Funktionen genau wie Variablen lokal und können daher nicht vom externen Bereich abgerufen werden.
foo
manipuliertbar
in sich.bar
kann nicht vom äußeren Bereich berührt werden, es sei denn, es ist im äußeren Bereich definiert.Das wird also nicht funktionieren:
quelle
Wenn Sie eine Funktion innerhalb einer Funktion deklarieren, sind die inneren Funktionen nur in dem Bereich verfügbar, in dem sie deklariert sind, oder in Ihrem Fall
pad2
kann der nur im Bereich aufgerufen werdendmy
.Alle in vorhandenen Variablen
dmy
sind in sichtbarpad2
, aber es kommt nicht umgekehrt vor: D.quelle
In Javascript (und vielen Sprachen) ist es völlig normal, Funktionen in Funktionen zu haben.
Nehmen Sie sich Zeit, um die Sprache zu lernen, und verwenden Sie sie nicht auf der Grundlage, dass sie dem ähnelt, was Sie bereits kennen. Ich würde vorschlagen, Douglas Crockfords Reihe von YUI-Präsentationen auf Javascript anzusehen, mit besonderem Schwerpunkt auf Akt III: Function the Ultimate (Link zum Herunterladen von Videos, Folien und Transkription)
quelle
Wird einen Fehler auslösen. Da
bar
innen definiert istfoo
,bar
wird nur innen zugänglich seinfoo
.Um es zu verwenden
bar
, müssen Sie es im Inneren ausführenfoo
.quelle