簡體   English   中英

具有復雜名稱的全局變量與用於搜索的輸入字段之間的真正區別是什么?

[英]whats the real difference between a global variable with complex name VS an input field used for searching?

如果我有一個網站,它有產品過濾器等。 如果我將值存儲在全局變量而不是元素值中,反之亦然。 當然,命名空間是一個問題,但如果它很復雜,它不太可能被覆蓋。 我讀過允許訪問變量以便可以更改它們的錯誤。 客戶端上的任何東西都不能訪問嗎? 另外,我看不出有人更改我的全局變量值與更改輸入值之間的區別。 如果我存儲用戶位置的 GPS 坐標以顯示 map,並且用戶更改了它,我將如何存儲“先前”位置和“新”位置,所以如果用戶想要恢復,他們可以。 只要我在訪問服務器時驗證我的數據,真正的問題是什么? 有什么想法嗎?

我讀過允許訪問變量以便可以更改它們的錯誤。 客戶端上的任何東西都不能訪問嗎?

這里有2個問題。

最重要的一項(通常)是代碼可維護性 當你有一個大腳本時,如果你使用全局變量,名字沖突是真正的可能性。 是的,您可以使用復雜的變量名,但是當代碼使用簡單而准確的變量名時,更容易閱讀代碼。

除了沖突之外,在給定的塊中使用大量變量會增加認知開銷。 如果一個變量只與代碼的一個特定部分相關,那么將變量僅分離到該部分可以使代碼更容易一目了然。 例如,可以替換

let isActive = false;
// 200 lines of code
button.addEventListener('click', () => {
  isActive = !isActive;
  alert('isActive is ' + isActive);
});

// 200 lines of code
(() => {
  let isActive = false;

  button.addEventListener('click', () => {
    isActive = !isActive;
    alert('isActive is ' + isActive);
  });
})();

(或者更好的是,使用 ES6 模塊來限制范圍)

有關此主題的長時間討論,請參見這篇文章

正如您所提到的,另一個問題是,如果變量是全局變量,則用戶可以更改它。 有時這是一個問題。 例如,如果您有一個跟蹤用戶收集的硬幣的游戲,則用戶可以打開控制台並執行window.coins = 1e9 (萬一他們知道 JS 並願意檢查源代碼來計算出來怎么做這樣的事情)。 將變量放入封閉的 IIFE 將使這種技術更難實現——但並非不可能

從根本上說,客戶可以選擇運行他們想要的任何代碼——這是他們的機器。 因此,您確實需要服務器端驗證 - 正如您所說的那樣,這很好。

只要我在訪問服務器時驗證我的數據,真正的問題是什么?

除了可維護性問題之外,這可能不是一個值得擔心的問題,因為很少有人知道並關心到足以修補其他網站上的代碼(即使那樣 - 這是他們自己的計算機,所以誰在乎呢?)。 許多網站使用全局變量。 它可能不優雅,但它仍然可以正常工作(只要發送到服務器的任何重要內容也在服務器上得到驗證)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM