Как настроить Ajax Call & amp; для каждого цикла для динамического раскрывающегося списка?

Представляем себе для объяснения первого примера:

Области JavaScript являются функциональными, а не блочными, а создание замыкания означает, что охватывающая область добавляется в лексическую среду закрытой функции.

После того, как цикл завершается, переменная уровня функции i имеет значение 5, и это то, что внутренняя функция «видит».

blockquote>

Во втором примере для каждого этапа итерации внешний литерал функции будет оценивать новый объект функции со своей собственной областью и локальной переменной num, значение которой установлено на текущее значение i , Поскольку num никогда не изменяется, он будет оставаться постоянным в течение срока действия замыкания. Следующий шаг итерации не перезаписывает старое значение, поскольку объекты функции являются независимыми.

Имейте в виду, что этот подход является довольно неэффективным, поскольку для каждой ссылки необходимо создать два новых функциональных объекта. Это необязательно, поскольку их можно легко обменивать, если вы используете узел DOM для хранения информации:

function linkListener() {
    alert(this.i);
}

function addLinks () {
    for(var i = 0; i < 5; ++i) {
        var link = document.createElement('a');
        link.appendChild(document.createTextNode('Link ' + i));
        link.i = i;
        link.onclick = linkListener;
        document.body.appendChild(link);
    }
}

2
задан Emma 23 March 2019 в 23:41
поделиться