我注意到有时人们会在$(function() { ...here... });
块中放置一堆可调用的函数。我想知道为什么,但后来注意到一个可能的原因:如果两个对象在不同的jQuery代码块中,命名冲突似乎不是一个问题。
我的想法是否正确?这似乎是一个很大的优势。
但是现在我采用了这种方法,我需要让其中一个函数可以从其他jQuery代码块中调用。所以我可以将函数移到代码块之外,但它需要调用代码块中的其他函数。
所以我需要将所有函数移到代码块之外,还是有办法保持这种分离,但仍能从另一个代码块中调用我的一个函数?
答案 0 :(得分:1)
您应该阅读模块模式。这是一个小例子:
window.Namespace = window.Namespace || {}; //defining our namespace
Namespace.Module = (function(){
var api = {};
var func = function() { //private function, accessible only inside this module
};
api.publicfunc = function() { // public function
};
return api; //all api functions will be available globally
})();
答案 1 :(得分:1)
他们使用jQuery的document.ready快捷方式的事实并不是定义变量的问题,而是变量(或函数)在匿名函数创建的闭包内部的事实< / p>
`function(){}`
所以是的,这主要是为了避免污染全局命名空间。它也完成了希望,一旦超出范围,垃圾收集器可以能够收集其中的一些内容(因为它超出了范围)。
如果你想拥有一个全局变量,那就没有错,只要尽可能地限制它们。如果你需要一个来自就绪块的内部,那么只需在外面定义它并引用它。
var MyGlobalObj_guid52z = {};
$(function(){
MyGlobalObj_guid52z.MyFunction = function(){
//do what you want in here
};
});
//and later you can do this
MyGlobalObj_guid52z.MyFunction();