都是全域性變數惹的禍

2022-01-13 15:21:23 字數 931 閱讀 4330

全域性變數之「禍」由來已久, 人所共「憤」,  但平時在做開發時,

常常還是不自覺地依靠全域性變數, 比較便捷, 也容易出很隱蔽的bug 。

最近發現了一例, 做了簡化處理, 不過本質是一樣的, 供大家日後借鑑。

var  global = null;      // 全域性變數常常不會如此明顯地自我標識, 不過要特別注意 public 變數

var obtainglobal = function()

var  init = function() ;

}var  search = function()  

var  another = function()

init(); 

search();

another();

search();

結果: 

object

object

bug 出現的過程是:

step1:  應用啟動, 呼叫 init() 方法初始化 global;

step2:  查詢操作, 呼叫 search() 方法, 此時獲取的 b 是 null;

step3:  另乙個操作, 呼叫 another() 方法, 這裡巧妙地修改了全域性變數, 將 b 賦值為 "i am back";

step4:  再次查詢操作, 呼叫 search() 方法, 此時獲取的 b 是 "i am back".

應用中, b 應該是顯示的; 當時百思不得其解, 為什麼有的時候可以顯示 b , 有的時候不能顯示 b; 在初始化的時候, 發現 b 是沒有被顯示的, 後來又被修改了, 但又始終找不到在**被修改了。 

這裡由於**比較少, 因此, 相對容易看到問題的存在; 當出現在專案中時, 這些全域性變數的讀取和修改就變得非常隱蔽, 掩藏在**海洋中, 再也難以尋見, 注意到, 這裡無法通過 ide 的搜尋功能搜尋到 global 被修改的痕跡。

都是 IDENTITY惹的禍

前不久系統伺服器出現了一次不大不小事故,資料庫乙個表的資料不翼而飛,這個表雖然算不上頂級重要的表,但也算的上是個很重要的表,大家趕緊查是什麼把這個表的資料刪的只剩下180多條資料.為什麼還有180多條資料存在哪?真是挺讓人納悶的,但發現這180多條資料中有乙個共性,那就是那個不該為空的字段變成了空值...

都是埠惹的禍

這幾天公司搬家,所以忙的blog好久都沒有更新,關鍵是沒有什麼技術上的事情,都不知道寫點什麼,呵呵。周四到週日一直在乙個客戶那邊進行產品的實施,整個過程自然比較有趣,對於我來說最重要的就是認識到了靈活程式設計的重要。我們的程式需要幾個通訊埠,其中乙個是1433用來連線sqlserver資料庫,很多的...

都是埠惹的禍

這幾天公司搬家,所以忙的blog好久都沒有更新,關鍵是沒有什麼技術上的事情,都不知道寫點什麼,呵呵。周四到週日一直在乙個客戶那邊進行產品的實施,整個過程自然比較有趣,對於我來說最重要的就是認識到了靈活程式設計的重要。我們的程式需要幾個通訊埠,其中乙個是1433用來連線sqlserver資料庫,很多的...