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.