1

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

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

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

那么我是否需要将所有函数移到代码块之外,或者有没有办法保持这种分离但仍然能够从另一个代码块调用我的一个函数?

4

2 回答 2

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
})();
于 2013-01-17T03:15:13.613 回答
1

他们使用 jQuery 的 document.ready 快捷方式这一事实对于定义变量来说并不是一个真正的问题,就像变量(或函数)位于由匿名函数创建的闭包内一样

`function(){}`

所以是的,这主要是为了避免污染全局命名空间。它还希望一旦超出范围,垃圾收集器可能能够收集其中的一些内容(因为它超出了范围)。

如果你想拥有一个全局变量,这并没有什么问题,只要尽量限制它们就可以了。如果您需要来自就绪块内部的一个,那么只需在外部定义它并在内部引用它。

var MyGlobalObj_guid52z = {};
$(function(){
 MyGlobalObj_guid52z.MyFunction = function(){
  //do what you want in here
 };
});
//and later you can do this
MyGlobalObj_guid52z.MyFunction();
于 2013-01-17T03:16:20.507 回答