关于在单个函数中组织jQuery函数的问题

时间:2013-01-17 03:05:27

标签: javascript jquery

我注意到有时人们会在$(function() { ...here... });块中放置一堆可调用的函数。我想知道为什么,但后来注意到一个可能的原因:如果两个对象在不同的​​jQuery代码块中,命名冲突似乎不是一个问题。

我的想法是否正确?这似乎是一个很大的优势。

但是现在我采用了这种方法,我需要让其中一个函数可以从其他jQuery代码块中调用。所以我可以将函数移到代码块之外,但它需要调用代码块中的其他函数。

所以我需要将所有函数移到代码块之外,还是有办法保持这种分离,但仍能从另一个代码块中调用我的一个函数?

2 个答案:

答案 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();