在jquery文件内部或外部准备好函数

到目前为止,我只是把我所有的jQuery善良放在$(document).ready()函数中,包括在某些用户交互中使用的简单函数。

但是不需要加载DOM文档的函数,也可以放在$(document).ready() 。 考虑一个非常简单的validation函数,例如:

 function hexvalidate(color) { // Validates 3-digit or 6-digit hex color codes var reg = /^(#)?([0-9a-fA-F]{3})([0-9a-fA-F]{3})?$/; return reg.test(color); } 

该函数仅在$(document).ready()函数中调用。

什么是最佳实践(语法,速度); 把这样的function放在 jQuery文档准备好的function之还是之外

把它放在里面,这样不会污染全局命名空间。 由于JavaScript的作用域链,它也确保了函数名的更快parsing。

如果它是一个可重用的组件,就把它放在外面 ,这样你就可以很容易地将它移动到一个单独的文件中,并从不同的环境中调用。

由于您已经使用JQuery,所以值得一提的是,在您的情况下,您可能需要将hexvalidate定义为外部的JQuery插件 ,然后在其中调用它。

我不认为你应该首先使用任何“正义function”。 在OOP JavaScript的“function”通常属于四个不同的types之一:

  • 构造函数或匿名的“init”闭包 – 用于构造对象。 唯一允许成为全局的函数
  • 方法 – 作为某个对象的一部分的函数
  • 实用程序 – 构造函数/方法的内部函数,从外部不可见
  • 常量 – 作为parameter passing的函数常量

例如

  (function() { <- init closure function helper1() { <- utility } globalSomething = { foobar: function() { <- method xyz.replace(/.../, function() { <- constant }) } } )() 

在你的例子中,'hexvalidate'显然是Validator对象的一部分,而这个对象又可以做成一个jQuery插件:

  (function($) { $.validate = { hexColor: function(color) { ... your code } more validators... } )(jQuery) 

将这些函数放在文档就绪函数中的一个好处是,它们不会污染您的全局名称空间……缺点是如果您需要它们在页面上的其他地方,它们将不可用。

如果你所有的函数只是从jQuery(function () { })块中调用,把它们放在里面。 否则,你不必要地污染全球名字空间,这可能导致冲突的道路。

只在全局声明其他作用域中的代码也使用的函数。

如果您创build的函数需要在$(document).ready()函数的范围之外调用,请将其保留在$(document).ready()函数之外。

否则保持内部。