Ich habe versucht, meinen Kopf um Umfang, speziell Verschlüsse einzuwickeln. Ich weiß, dass es viele Beiträge zum Thema gibt, und ich habe viel gelesen. Aber die meisten Orte verweisen auf das Thema als fortgeschritten und verwenden eine relativ schwer zu erfassende Terminologie. Ich würde gerne absolut sicher sein, dass ich die Grundlagen richtig verstanden habe, damit ich mich nicht in die komplizierteren Themen mit einer falschen Vorstellung davon begeben kann, wie Funktionen wirklich funktionieren.Verschachtelte Funktionen, Verschlüsse und Bereich
Also ... Ich wählte eine grundlegende Funktion, und würde wirklich gerne für jemanden, mir zu sagen, was ich denke, es passiert unter der Haube ist, was tatsächlich passiert.
Dies ist der Code:
function sum(a) {
return function(b) {
return a+b
}
}
console.log(sum(1)(sum(2)))
(. Ich weiß, dass es die Summe nicht wirklich ist zu tun, ich mit ihm gezwickt wurde, um zu versuchen, zu verstehen, was in jedem Schritt vorging)
Also, mein Hauptbezweifelt war, warum A 1 war, und nicht 2. Ich kam zu dem Schluss, dass die Schließung erstellt wird, sobald function(b)
erstellt wird, um als ein Argument zu nehmen, direkt nach der Rückkehr von sum(1)
. Daher nehme ich bei der Definition von Closure an, dass zum Zeitpunkt der Erstellung der Funktion auch die lexikalische Umgebung gespeichert wird (in der a = 1
). Ist das richtig?
Ich habe ein Diagramm der Schritte gemacht.
ich den Code zu verstehen, aber nicht das Diagramm, so dass nicht klar ist, was man von der Hauptstadt bedeutet 'A's I bin mir nicht sicher, wie ich antworten soll. Beachten Sie, dass 'sum (2)' eine neue Funktion zurückgibt, die Sie nie aufrufen, daher ist ihre Schließung hier irrelevant. Da "sum (2)" eine neue Funktion liefert, warum würden Sie das als Argument für die Rückkehr von "sum (1)" verwenden? Es macht keinen Sinn, die Nummer 1 zu einer Funktionsreferenz hinzuzufügen. JS wird es tun (was zu einer Zeichenkette führt), aber es scheint ein ziemlich seltsamer Testfall zu sein. – nnnnnn
@nnnnnn Es soll 'a = 1' sein, und jedes Rechteck stellt eine lexikalische Umgebung dar. Ok, ich denke, was du gerade gesagt hast über die Rückkehr von 'sum (2)' nie genannt zu werden, hilft, einen Sinn daraus zu machen. Nur um zu verdeutlichen, gibt es noch zwei Schließungen hier richtig? Eins, wenn 'sum (1)' zuerst definiert wird und das andere für 'sum (2)' –
@Sean Sie haben mehrere Antworten erhalten, aber keine akzeptiert. Was genau verursacht dir schon Probleme? – rand