使用自调用匿名函数和$(文档).ready

时间:2012-03-08 02:13:30

标签: javascript jquery

我刚刚学会了自称匿名函数。我遇到的一些代码片段使用了自调用函数和$(document).ready。使用两者似乎是多余的,或毫无意义的。

是否存在使用

的情况
(function(){
   $(document).ready();
})();

VS

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

我认为您要么立即执行脚本,要么在DOM加载后执行。我不明白为什么你们两个都在一起使用。

感谢。

3 个答案:

答案 0 :(得分:11)

第一个例子肯定有一个用例。如果您在同一页面上加载了其他JS库/脚本,则无法保证它们不会覆盖$变量。 (当你在同一页面上有Prototype和jQuery时,这很常见。)

因此,如果Prototype使用$,则需要在需要使用jQuery的任何时候使用jQuery。这可能会非常难看:

jQuery(function(){
    jQuery('a', '#content').bind('click', function(){
        if(jQuery(this).attr('href') == 'www.google.com')
        {
            alert("This link goes to Google");
            jQuery(this).addClass('clicked'));
        }
    });
})

请记住,我们不能使用$,因为这是Prototype在全球范围内的一种方法。

但如果你把它包裹在里面..

(function($){
    $(function(){

        // your code here

    });
})(jQuery);

$实际上会引用jQuery库,同时仍在外部引用Prototype!这有助于整理您的代码:

(function($){
    $(function{}(
        jQuery('a', '#content').bind('click', function(){
            if(jQuery(this).attr('href') == 'www.google.com')
            {
                alert("This link goes to Google");
                jQuery(this).addClass('clicked'));
            }
        });
    ));
})(jQuery);

这是jQuery扩展的常见模式,以确保它们始终添加到jQuery对象中,但可以使用$编写以保持代码整洁。

答案 1 :(得分:2)

你不想一起使用它们,你正在做的事情需要你吗?

在这里的jquery api文档http://api.jquery.com/ready/中,您可以看到以下示例:

  

.ready()方法通常与匿名函数一起使用:

     

$(document).ready(function(){
  // .ready()的处理程序调用。

     

});

     

这相当于调用:

     

$(function(){
  // .ready()的处理程序调用。

     

});

但我不确定这是否能回答你的问题,因为我看不到你实际问的问题。希望这有助于实现同样的目标!

答案 2 :(得分:1)

引入另一个闭包的唯一原因是引入另一个范围边界来加载/保护全局对象,例如$。

例如:

$(document).ready(function(){

    // Do upper scope things.

    (function(){

        // Do lower scope things.

    })();

});

基于你说你最近在学习这些东西,我认为你是相对较新的JavaScript。

我已经整理了一篇博文,可能有助于从JavaScript新手的角度解释一些基本概念,包括功能范围。 http://bit.ly/tLkykX