第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何避免JavaScript中的全局變量?

如何避免JavaScript中的全局變量?

猛跑小豬 2019-07-26 11:29:00
如何避免JavaScript中的全局變量?我們都知道全局變量不是最佳實踐。但有幾個例子,沒有它們很難編碼。您使用什么技術來避免使用全局變量?例如,給定以下場景,您將如何使用全局變量?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();}相關標記:<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. -->此代碼來自具有多個的Web表單<input type="file">。它一次上傳一個文件以防止大量請求。它通過POST到iframe,等待觸發(fā)iframe onload的響應,然后觸發(fā)下一次提交來完成此操作。您不必專門回答這個例子,我只是提供它來參考我無法想到避免全局變量的方法。
查看完整描述

3 回答

?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

首先,不可能避免使用全局JavaScript,有些東西總是懸在全球范圍內。即使您創(chuàng)建了一個名稱空間,這仍然是一個好主意,該名稱空間將是全局的。

但是,有許多方法不濫用全球范圍。兩個最簡單的方法是使用閉包,或者因為你只需要跟蹤一個變量,只需將其設置為函數(shù)本身的屬性(然后可以將其視為static變量)。

關閉

var startUpload = (function() {
  var uploadCount = 1;  // <----
  return function() {
    var fil = document.getElementById("FileUpload" + uploadCount++);  // <----

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

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

*請注意,uploadCount此處內部正在進行遞增

功能屬性

var startUpload = function() {
  startUpload.uploadCount = startUpload.count || 1; // <----
  var fil = document.getElementById("FileUpload" + startUpload.count++);

  if(!fil || fil.value.length == 0) {    
    alert("Finished!");
    document.forms[0].reset();
    startUpload.count = 1; // <----
    return;
  }

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

我不確定為什么uploadCount++; if(uploadCount > 1) ...有必要,因為看起來條件總是如此。但是如果你確實需要對變量進行全局訪問,那么上面描述的函數(shù)屬性方法將允許你這樣做,而變量實際上不是全局變量。

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

但是,如果是這種情況,那么您應該使用對象文字或實例化對象,并以正常的OO方式進行此操作(如果它可以使用模塊模式,則可以使用模塊模式)。


查看完整回答
反對 回復 2019-07-26
  • 3 回答
  • 0 關注
  • 724 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號