$(document).ready速记

$(document).ready是以下简写forms吗?

 (function($){ //some code })(jQuery); 

我看到这种模式使用了很多,但我无法find任何参考。 如果是$(document).ready()简写forms,有没有什么特别的原因可能不起作用? 在我的testing中,似乎总是在准备好的事件之前开火。

$(document).ready(handler)的简写是$(handler) (其中handler是一个函数)。 看到这里 。

您问题中的代码与.ready()无关。 相反,它是以jQuery对象作为参数的立即调用的函数expression式(IIFE)。 其目的是将至less$variables的范围限制在自己的块中,所以不会引起冲突。 您通常会看到jQuery插件使用的模式,以确保$ == jQuery

简写是:

 $(function() { // Code here }); 

正确的速记是这样的:

 $(function() { // this behaves as if within document.ready }); 

您发布的代码…

 (function($){ //some code })(jQuery); 

…创build一个匿名函数,并立即执行它与jQuery作为arg $传入。 所有它有效地做的是把代码放在函数内部,像正常一样执行它,因为$已经是jQuery的别名了。 :d

这不是$(document).ready()的缩写。

您发布的代码包含内部代码,并使jQuery可用作为$而不会污染全局名称空间。 当你想在一个页面上同时使用prototype和jQuery时,可以使用它。

logging在这里: http : //learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/#use-an-immediately-invoked-function-expression

这些特定的行是jQuery插件的常用包装:

“…为了确保你的插件不会与其他可能使用美元符号的库冲突,最好将jQuery传递给自动执行的函数(闭包),将它映射到美元符号,在其执行范围内被另一个图书馆覆盖“。

 (function( $ ){ $.fn.myPlugin = function() { // Do your awesome plugin stuff here }; })( jQuery ); 

http://docs.jquery.com/Plugins/Authoring

准备好的多框架安全速记是:

 jQuery(function($, undefined) { // $ is guaranteed to be short for jQuery in this scope // undefined is provided because it could have been overwritten elsewhere }); 

这是因为jQuery不是唯一使用$undefinedvariables的框架

那这个呢?

 (function($) { $(function() { // more code using $ as alias to jQuery // will be fired when document is ready }); })(jQuery); 

顺便说一下,我一直使用的另一个快捷方式(基本上是已经提到的一个版本)

 $(myFunction()); //myFunction already defined elsewhere