1. 程式人生 > >js之全域性與區域性坑

js之全域性與區域性坑

在js中coding的時候有個習慣,因為有許多變數是需要全域性使用的,於是在A檔案中頭部分定義一個變數

var self = {};
self.m_num = [];

這樣在A檔案中所有的成員變數都在可以通過self來訪問了
由於模組的不同,於是有了B檔案,出於程式設計習慣,於是在B檔案頭上也定義了一個變數

var self = {};
self.m_num = 1;

此時執行程式,發現A檔案中有報錯,居然是在

self.m_num.push(1); 

心想不可能啊,怎麼一個數組不能push。於是重新清除快取,仍然報此錯誤,檢查變數值,居然是1,徹底崩潰。
原來在js中只要在同一個程序,不在函式中出現的變數就是全域性變數,檔案模組沒有區分這個變數,相當於在C中A檔案定義了一個int num,在B檔案中 extern一下這個變數。在js中自動幫你extern了,知道這個問題就好辦了,那麼self作為全域性變數不用少,在每個檔案中加入自己的空間。

self.area_a = {};  // A檔案
self.area_b = {};  // B檔案

嗯,通過爬這個坑漲了不少知識,切記下來,哪天忘了再翻出來看看