【问题标题】:jquery: help difference between domready and $(function…jquery: 帮助 domready 和 $(function...
【发布时间】:2010-11-07 20:01:41
【问题描述】:

大家好, 我发现了一个非常有趣的网站模板,它的头文件中包含以下几行:

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

…normal jquery

 }); // end of document ready
})(jQuery); // end of jQuery name space 

这是什么意思?我想如果我想使用 domready 我必须写:

$(document).ready(function(){

区别在哪里,我可以改变吗? 谢谢你的帮助

【问题讨论】:

    标签: jquery domready


    【解决方案1】:

    $(function() { 只是 a shortcut 对应于 $(document).ready(function() {,它们是等价的。 (function($){ .... })(jQuery); 部分只是为了兼容性,所以 $ 是范围内的 jQuery 对象(即使它是外面的其他东西)。

    这里需要注意:document.ready 处理程序接收jQuery 作为它们的第一个参数,因此该站点的代码可以更简洁地表示为:

    jQuery(function($){
      …normal jquery
    }); // end of document ready
    

    所以回答你的问题:你必须改变它吗?不,使用您喜欢的任何格式...我更喜欢$(function() { });,因为它的输入更少,而且我每天要输入一百次。如果您发现 $(document).ready(function() { }); 更清晰,请坚持使用,但它们的行为相同......所以请使用您和您的团队更清晰的那个。

    【讨论】:

    • 认为你有一个错字尼克;应该在/#/$/那里
    • @p00ya - 没有关注,在哪里?
    【解决方案2】:

    您引用的代码的 DOM 就绪部分:

    $(function() {
      // Document is ready let's write some jQuery!
    });
    

    完全等价于:

    $(document).ready(function () {
       // Document is ready let's write some jQuery!  
    });
    

    包装 DOM 就绪的东西的部分是为了一个完全独立的目的:

    (function($) {
      ...
    })(jQuery); // end of jQuery namespace
    

    上面其实是一个函数调用。您正在调用一个匿名函数并将jQuery 对象作为参数传递,然后将其分配给参数$。这确保了里面的所有代码(我有...)可以使用$,知道它引用jQuery。

    这是人们使用的故障保护,因为其他一些 JavaScript 代码可能已将 $ 变量分配给全局命名空间中的 jQuery 以外的其他对象。通过将 jQuery 代码包装在一个函数中(记住——只有函数在 JavaScript 中具有作用域),将 jQuery 分配给 $,你就安全了。

    【讨论】:

      猜你喜欢
      • 2011-11-02
      • 1970-01-01
      • 2011-05-09
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多