我现在正在通过在函数中包含所有内容,将全局变为“伪全局变量”从我的代码中删除大部分全局变量,这些变量都可以从任何地方访问在该功能块内。通过名称作为字符串访问“伪全局变量”
(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