【问题标题】:jQuery newbie: what does jQuery(function($) { ... }) means?jQuery 新手:jQuery(function($) { ... }) 是什么意思?
【发布时间】:2011-09-21 05:30:26
【问题描述】:

我知道在 jQuery 中,$(callback)jQuery(callback) 相同,其效果与 $(document).ready() 相同。

怎么样

jQuery(function($) {

 });

谁能给我解释一下这种功能是什么意思?

它有什么作用?

这个和$(callback)有什么区别??

这个和$(function())有什么区别??

【问题讨论】:

    标签: jquery jquery-ui jquery-selectors


    【解决方案1】:
    jQuery(function($) {
    
    });
    

    是所有三个版本中最安全的版本。它使$ 成为局部变量,从而优雅地避免了与可能使用$ 符号的任何其他变量的冲突。

    我想它也是最近添加的,不记得以前见过。

    这些函数都做同样的事情——当 DOM 准备好时执行一些代码。 $(document).ready(function(){}) 是原始的,它匹配底层的javascript API。

    “$”和“jQuery”接受函数作为参数被创建为快捷方式,以避免重复这种常见的结构。接受一个接受 $ 作为其第一个参数的函数是进一步的语法糖 - 现在您可以方便地使用闭包,而无需自己做。

    【讨论】:

    • 我喜欢你的回答(如果正确的话),解释得很清楚:)
    • 我可以执行以下操作吗?相同的? $(function($){...});
    • 所以$(document).ready(function(){}) 等价于jQuery(function($) {}); ??
    【解决方案2】:
    • $(function()) 是语法错误。
    • $() 创建一个空的 jQuery 对象。
    • $(document).ready(function() { ... }) 在 DOM 就绪时执行给定的函数
    • $(function() { ... }) 是同一件事的捷径
    • jQuery(function($) { ... }) 也这样做,但它也使 $ 在函数内部可用,无论它在外部设置什么。

    【讨论】:

      【解决方案3】:

      当您调用主要的 jQuery 工厂函数(jQuery(<something>) 或常用快捷方式 $(<something>))时,它会根据 <something> 的类型决定要做什么。

      如果您将字符串作为<something> 传递,它假定这是一个选择器规范,并将返回与该选择器匹配的元素的 jQuery 列表。

      如果您传递一个 jQuery 对象(表示元素列表,即从先前调用 jQuery 返回的对象),它将只返回该对象(本质上这是一个非操作)。

      如果你向它传递一个 DOM 元素,它将返回一个只包含该元素的 jQuery 列表(因此你可以将 jQuery 方法应用于该元素)。这就是 $(document).ready() 发生的事情 - 你将 DOM 元素“文档”传递给工厂函数,它返回一个表示该元素的 jQuery 对象,然后使用该对象的 ready() 方法将事件处理函数添加到就绪事件列表中的所有 DOM 元素(在本例中只有一个,document)。

      如果你传递一个函数,这只是“在一切准备就绪时运行它”的简写,所以$(function() { ... }); 相当于$(document).ready(function() { ... });

      【讨论】:

        【解决方案4】:

        所以我对此进行了更正,如果您阅读了第一条评论,它会给出一些背景信息。

        jQuery(function() {
            // Document Ready
        });
        
        
        (function($) {
            // Now with more closure!
        })(jQuery);
        

        我不是 100% 确定,但我认为这只是将 jQuery 对象传递到闭包中。我会在谷歌上做一些挖掘,看看我是对还是错,并会相应地更新。

        编辑:

        我说得很对,但这里直接来自他们的网站:

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

        “我知道并喜欢的很棒的美元符号在哪里?它仍然存在,但是为了确保您的插件不会与可能使用美元符号的其他库发生冲突,最好将 jQuery 传递给 self执行将其映射到美元符号的函数(闭包),因此在其执行范围内它不能被另一个库覆盖。”

        【讨论】:

        • -1 为您的第一行。这样做有一个很好的理由:如果您使用 $.noConflict(); 来恢复包含 jQuery 之前的任何 $ ,您可以在您的函数中使 $ 可用(就绪回调接收 jQuery 对象作为第一个参数)将所有内容包装在另一个匿名函数中。
        • 您准备好在文档中这样做了吗?很公平,我会同时更新帖子和我自己的常识!感谢您的澄清。
        • 视情况而定 - 如果您只想编写一个 document.ready 函数,那么它是有意义的。如果在 document.ready 函数之前/之后有任何其他代码使用 jQuery,我肯定会使用 (function($){ ... })(jQuery); 方法
        【解决方案5】:

        首先,jQuery()$(document).ready() 不一样

        $()jQuery() 的快捷方式

        还有……

        $(function(){ ...});$(document).ready(function(){ ... }); 的快捷方式

        因此:

        jQuery(function(){ ... }) 
        

        功能与

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

        但是...

        jQuery('#foo').css("background-color", "#f00");
        

        作用不一样

        $(document).ready('#foo').css("background-color", "#f00");
        

        所以……

        jQuery()$(document).ready()相同

        【讨论】:

        • 嗯...我很确定如果你在里面传递一个函数?
        • 是的,如果传递一个函数,使用匿名函数快捷方式,两者将执行相同的操作。但是说jQuery()$(document).ready() 一样是错误的说法。
        猜你喜欢
        • 2011-02-25
        • 2020-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-09
        • 2011-11-21
        相关资源
        最近更新 更多