нужна помощь в понимании кода JS [закрыто]

Привет, я новичок в JavaScript, и я не могу понять следующий код:

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 ??

Из того, что я понимаю, 7 передается в качестве аргумента, ноcreateAdders() Безразлично»t присваивает 7 любой переменной, значит ли это, что 7 передается следующей функции внутриcreateAdders() то есть анонимная функция и назначенная переменная.n

Правильна ли моя логика?

Код выше, кажется, работает, но для каждого вызова результат равен 11. Я нашел этот код в очень надежном блоге в качестве примера для ситуации, когда замыкания были бы полезны. Приведенный выше код затем изменяется следующим образом, чтобы процитировать Преимущества закрытий.

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

Применяется ли здесь та же логика?

Мне нужно понять, как n присваивается значение 7

Почему (i) используется в конце функции в новом коде? I '

Ответы на вопрос(3)

Ваш ответ на вопрос