我想好,我真的很,但我看不出怎么办呢:)
如何不使用全局这里任何意见将不胜感激。 让我们把全球G.
Function A
Builds G by AJAX
Function B
Uses G
Function C
Calls B
Called by numerous event handlers attached to DOM elements (type 1)
Function D
Calls B
Called by numerous event handlers attached to DOM elements (type 2)
我不知道怎样才能避开使用全局这里。 在DOM元素(类型1&2)在其他功能(E&F),这是未连接与A.我不想至G添加到每个事件处理(因为它的大,有很多这样的事件处理程序)创建的,和做所以需要同一种解决方案,因为我正在寻找在这里(即,让克至E&F)。
全球G,顺便说一句,是一个数组,它是必要建立其他元素,因为他们又通过AJAX建造。
我不相信,一个单是真正的解决方案,无论是。
谢谢。
在一个大的立即执行的功能,当然坚持一切!
(function() {
// Your code goes here
})(); // Called right away
你可以把任何东西在那里,这将是在一个较窄的范围内的任何访问,但他们仍然不会是全球性的。
另外,如果你是唯一的文件,停止避免全局,因为真的没有伤害,除非你正在做某种可重用的组件中。
我不知道这是否是一种选择?
Function Everything() {
var G
Function A
Builds G by AJAX
Function B
Uses G
Function C
Calls B
Called by numerous event handlers attached to DOM elements (type 1)
Function D
Calls B
Called by numerous event handlers attached to DOM elements (type 2)
}();
不要担心路过的G事件。 这只是实际的对象,而不是一个副本的引用,因此它不会造成内存问题。 函数,对象和数组作为参考传递。
如果事件处理程序(即依赖于G)之一,你已经收到了AJAX响应之前被激发,会发生什么? 为了解决这个问题,并通过关闭至G B结合,你可以尝试在AJAX回调拼凑事件处理程序:
function A() {
ajaxLoad(function(G) {
attachEvents1(C);
attachEvents2(D);
function B() {
G.use();
}
function C() {
B();
}
function D() {
B();
}
});
}
你不给我们提供了很多的信息,知道的最佳替代品是什么,但这里有一些一般类型的选项:
阿贾克斯结果作为传递函数参数
Function A() {
Builds G by AJAX
B(G)
}
Function B(g) {
Uses g
}
因为,G的时间是这样的,它不能被使用,直到在一个成功的处理程序反正叫,那么也许你只是把它传递给B作为参数,不需要它作为一个全球性的。
DOM元素检索根据需求
对于DOM元素中,通常不要求存储在JavaScript变量DOM元素的引用。 如果你给他们适当的标识,并可以根据需求随时需要与他们获取document.getElementById("idName")
如果你真的需要在众多的活动和功能提供持续的变量,那么你有两个选择:
自执行函数闭包来共享持久性数据没有全局
你可以将它们存储自执行的函数闭包内:
(function() {
var G = [];
Function A
Builds G by AJAX
Function B
Uses G
})();
单全局对象
创建一个真正的全球性,你再存储您的其他数据如关闭性质在:
var myMainGlobal = {};
myMainGlobal.G = [];
myMainGlobal.A = function() {
Builds myMainGlobal.G by AJAX
}
myMainGlobal.B = function() {
Uses myMainGlobal.G
}
这至少只创建一个实际的顶级全球性的象征,同时让你,因为你需要有尽可能多的全球性数据。