Javascript 在jQuery中表示文档就绪的不同方式?

Javascript 在jQuery中表示文档就绪的不同方式?,javascript,jquery,Javascript,Jquery,这两种说法是否相同,即表示文件准备就绪的方式: $(function() { // }); 及 或者两者之间有区别吗?如果有,那么我应该在什么时候使用哪个?第一个是.ready()的快捷方式 第二个是无效的,因为您试图调用一个不可调用的对象 你可能是这个意思: // v--------no $ at the beginning (function( $ ) { // simply a new lexical environment with a //

这两种说法是否相同,即表示文件准备就绪的方式:

$(function() {
  //
});


或者两者之间有区别吗?如果有,那么我应该在什么时候使用哪个?

第一个是
.ready()
的快捷方式

第二个是无效的,因为您试图调用一个不可调用的对象

你可能是这个意思:

// v--------no $ at the beginning
    (function( $ ) {

       // simply a new lexical environment with a 
       //        local $ parameter pointing to jQuery

    })(jQuery);
…虽然这与DOM ready无关

您的第一个示例中有一个变体,它结合了这两个方面:

jQuery(function( $ ) {

  // DOM ready, and creates a local $ parameter pointing to jQuery

});

它们都不一样

第一个代码块用于在documentready上执行函数,当我们希望在不等待加载其余代码的情况下立即执行代码块时,将使用第二个代码块。但是代码的第二部分有一些错误。它应该如下所示

(function($) {
   //
})(jQuery);
这是不正确的:

$(function($) {
   //
})(jQuery);
您正在将一个函数传递给
$(…)
,然后调用结果。但是,
$(…)
的结果是一个jQuery对象,它不是一个函数。这样您可能会看得更清楚:

$(

    function($) {
        //
    }

)

(jQuery);
通常,有三个版本的
document.ready
,它们彼此相等:

$(function() {...});

$(document).ready(function() {...});

$().ready(function() {...});

最后一个是在与各种JS库一起工作时使用的。您可能希望看到@Briedis,那么在插件中使用第二个可以最大限度地减少与其他库冲突的机会吗?当然,因为您将jQuery对象作为局部变量“$”传递。如果其他库也希望使用“$”全局变量,则存在冲突。
$()
在jQuery的最新版本(>=1.4,IIRC)中不起作用,因为这些版本将其视为空选择,而不是选择文档元素。最好避免。@lonesomeday:你可能是对的,最好避免(因为它没有得到官方支持),但它确实有效,因为jQuery的
.ready()
函数当前忽略了传递给它的
文档<代码>$.fn.ready(…
$('MooTools').ready(func…
也可以,但同样不受支持。@patrick dw:我不确定它们是否“不受支持”,因为即使是文档都说它们可以使用(不过添加了“不推荐”)。@pimvdb:我认为这是一个公平的观点,但官方文档有效地说出来似乎很愚蠢“你可以这样做,但不要这样做”。这感觉像是一个小的更新远离不受支持。:)
$(function() {...});

$(document).ready(function() {...});

$().ready(function() {...});