257

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

(function($){

//some code

})(jQuery);

我看到这种模式经常使用,但我找不到任何参考。如果它是 的简写$(document).ready(),是否有任何特殊原因它可能不起作用?在我的测试中,它似乎总是在 ready 事件之前触发。

4

8 回答 8

568

简写是:

$(function() {
    // Code here
});
于 2011-05-14T19:00:36.727 回答
260

$(document).ready(handler)is (函数$(handler)在哪里)的简写。handler这里

您问题中的代码与.ready(). 相反,它是一个以 jQuery 对象作为参数的立即调用函数表达式 (IIFE)。它的目的是至少将$变量的范围限制在它自己的块中,这样它就不会引起冲突。您通常会看到 jQuery 插件使用的模式来确保$ == jQuery.

于 2011-05-14T19:00:22.487 回答
93

正确的简写是这样的:

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

您发布的代码...</p>

(function($){

//some code

})(jQuery);

…创建一个匿名函数并立即执行它,并jQuery作为 arg 传入$。它实际上所做的只是获取函数内部的代码并像往常一样执行它,因为$它已经是jQuery. :D

于 2011-05-14T19:06:23.423 回答
16

这不是$(document).ready().

您发布的代码将内部代码封装起来,并使 jQuery 可用,$而不会污染全局命名空间。当您想在一个页面上同时使用原型和 jQuery 时,可以使用此选项。

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

于 2011-05-14T19:04:00.863 回答
14

更短的变体是使用

$(()=>{

});

where$代表 jQuery,()=>{}被称为“箭头函数”,它继承this自闭包。(所以this你可能会有window而不是document。)

于 2018-10-04T22:38:43.167 回答
11

ready 的多框架安全简写是:

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

这是因为 jQuery 不是唯一使用$andundefined变量的框架

于 2013-12-16T12:31:35.840 回答
11

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

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

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

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

于 2011-05-14T19:11:08.073 回答
0

那这个呢?

(function($) { 
   $(function() {
     // more code using $ as alias to jQuery
     // will be fired when document is ready
   });
})(jQuery);
于 2016-07-23T12:54:37.743 回答