brauche Hilfe zum Verständnis von JS-Code [geschlossen]

Hallo, ich bin neu in Javascript und kann den folgenden Code nicht verstehen:

var createAdders = function () {

    var fns = [];

    for (var i = 1; i < 4; i++) {

        fns[i] = (function (n) {
            return i + n;
        });
    }
    return fns;
}
var adders = createAdders();
adders[1](7); //11 ??
adders[2](7); //11 ??
adders[3](7); //11 ??

Nach meinem Verständnis wird 7 aber als Argument übergebencreateAdders() Weist keiner Variablen 7 zu, bedeutet dies, dass 7 an die nächste Funktion innerhalb von übergeben wirdcreateAdders() die anonyme Funktion und der Variablen zugeordnetn.

Ist meine Logik richtig?

Der obige Code scheint zu funktionieren, aber für jeden Aufruf ist das Ergebnis 11. Ich fand diesen Code in einem sehr zuverlässigen Blog als Beispiel für eine Situation, in der Schließungen nützlich wären. Der obige Code wird dann folgendermaßen geändert, um das zu zitieren Vorteile von Verschlüssen.

var createAdders = function () {
    var fns = [];
    for (var i = 1; i < 4; i++) {
        (function (i) {
            fns[i] = (function (n) {
                return i + n;
            });
        })(i)     //// why is (i) used here? what purpose does it serve??////
    }
    return fns;
}

var adders = createAdders();
adders[1](7); //8 
adders[2](7); //9 
adders[3](7); //10

Wird die gleiche Logik auch hier angewendet?

Ich muss verstehen, wie n der Wert 7 zugewiesen wird

Warum wird (i) am Ende der Funktion im neuen Code verwendet?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage