我現在正在通過在函數中包含所有內容,將全局變爲「僞全局變量」從我的代碼中刪除大部分全局變量,這些變量都可以從任何地方訪問在該功能塊內。通過名稱作爲字符串訪問「僞全局變量」
(function(){
var g = 1;
var func f1 = function() { alert (g); }
var func f2= function() { f1(); }
})();
(從技術上講,這是隻爲我的「發行版」,在這裏我我的所有文件一起追加到一個單一的文件,並與上述包圍他們....我的dev版本仍具有典型的每一個JS全球文件)
這一切都很好,除了一件事...有一個重要的地方,我需要通過字符串名稱訪問這些「全局變量」的一些。以前,我可以這樣做:
var name = "g";
alert (window[name]);
,它也做了同樣的
alert(g);
現在 - 從塊內 - 我想這樣做,我的僞全局。但我不能,因爲它們不再是任何父對象(「窗口」)的成員,儘管它們在範圍之內。
有沒有辦法通過字符串訪問它們?
謝謝...
啊,是啊,EVAL。不知道爲什麼我沒有想到這一點。但是,我認爲我不想去那裏。 :) – rob 2010-05-04 21:02:53
是否有任何理由,他不能只是命名他用來包裝代碼的功能,然後作爲該對象的成員訪問「全局」? 這就是我在我的回答中所建議的,我只是好奇,如果有什麼我錯過了,你可以解釋。 – MisterMister 2010-05-05 02:32:56
@MisterMister:這很可能是一個很好的方法,這取決於他的代碼,它是如何構造的細節,以及究竟爲什麼他需要通過一個字符串名稱來訪問一個全球性的,又有多少重構會爲了讓需要這種方法工作。沒有這些細節,我真的不確定什麼是最好的,儘管你的答案總的來說是一個合理的方法。 – 2010-05-05 03:16:54