Die Kinder werden sich immer an die Geheimnisse erinnern, die sie mit ihren Eltern geteilt haben, auch wenn die Eltern nicht mehr da sind. weg sind. Das ist es, was Abschlüsse für Funktionen sind.
Die Geheimnisse der JavaScript-Funktionen sind die privaten Variablen
var parent = function() {
var name = "Mary"; // secret
}
Jedes Mal, wenn Sie es aufrufen, wird die lokale Variable "name" erstellt und erhält den Namen "Mary". Und jedes Mal, wenn die Funktion beendet wird, geht die Variable verloren und der Name wird vergessen.
Da die Variablen bei jedem Funktionsaufruf neu erstellt werden und niemand sonst sie kennt, muss es einen geheimen Ort geben, an dem sie gespeichert werden. Er könnte heißen Die Kammer des Schreckens o Stapel o lokaler Geltungsbereich aber das spielt eigentlich keine Rolle. Wir wissen, dass sie da sind, irgendwo, versteckt in der Erinnerung.
Aber in JavaScript gibt es die Besonderheit, dass Funktionen, die innerhalb anderer Funktionen erstellt werden, auch die lokalen Variablen ihrer Eltern kennen und sie behalten können, solange sie leben.
var parent = function() {
var name = "Mary";
var child = function(childName) {
// I can also see that "name" is "Mary"
}
}
Solange wir uns also in der übergeordneten Funktion befinden, kann diese eine oder mehrere untergeordnete Funktionen erstellen, die die geheimen Variablen des geheimen Ortes gemeinsam nutzen.
Das Traurige ist jedoch, dass, wenn das Kind auch eine private Variable seiner übergeordneten Funktion ist, es auch sterben würde, wenn die übergeordnete Funktion endet, und die Geheimnisse würden mit ihnen sterben.
Um zu überleben, muss das Kind gehen, bevor es zu spät ist.
var parent = function() {
var name = "Mary";
var child = function(childName) {
return "My name is " + childName +", child of " + name;
}
return child; // child leaves the parent ->
}
var child = parent(); // < - and here it is outside
Und jetzt, obwohl Mary nicht mehr läuft", ist die Erinnerung an sie nicht verloren und ihr Kind wird sich immer an ihren Namen und andere Geheimnisse erinnern, die sie während ihrer gemeinsamen Zeit teilten.
Wenn Sie also das Kind "Alice" nennen, wird es antworten
child("Alice") => "My name is Alice, child of Mary"
Das ist alles, was es zu erzählen gibt.