Jak uniknąć zmiennych globalnych w JavaScript?

Wszyscy to wiemyzmienne globalne to nic innego jak najlepsza praktyka. Istnieje jednak kilka przypadków, w których trudno jest bez nich kodować. Jakich technik używasz, aby uniknąć użycia zmiennych globalnych?

Na przykład, biorąc pod uwagę następujący scenariusz, w jaki sposób nie użyłbyś zmiennej globalnej?

Kod JavaScript:

var uploadCount = 0;

window.onload = function() {
    var frm = document.forms[0];

    frm.target = "postMe";
    frm.onsubmit = function() {
        startUpload();
        return false;
    }
}

function startUpload() {
    var fil = document.getElementById("FileUpload" + uploadCount);

    if (!fil || fil.value.length == 0) {
        alert("Finished!");
        document.forms[0].reset();
        return;
    }

    disableAllFileInputs();
    fil.disabled = false;
    alert("Uploading file " + uploadCount);
    document.forms[0].submit();
}

Odpowiedni znacznik:

<iframe src="test.htm" name="postHere" id="postHere"
  onload="uploadCount++; if(uploadCount > 1) startUpload();"></iframe>

<!-- MUST use inline JavaScript here for onload event
     to fire after each form submission. -->

Ten kod pochodzi z formularza internetowego z wieloma<input type="file">. Przesyła pliki pojedynczo, aby zapobiec ogromnym żądaniom. Robi to przezSŁUPEKdo iframe, czekając na odpowiedź, która uruchamia onload iframe, a następnie uruchamia następne przesłanie.

Nie musisz konkretnie odpowiadać na ten przykład, dostarczam go tylko w odniesieniu do sytuacji, w której nie jestem w stanie wymyślić sposobu uniknięcia zmiennych globalnych.

questionAnswers(10)

yourAnswerToTheQuestion