$(document).ready简写

Mar*_*own 236 javascript jquery document-ready shorthand

以下是速记$(document).ready吗?

(function($){

//some code

})(jQuery);
Run Code Online (Sandbox Code Playgroud)

我看到这种模式使用了很多,但我找不到任何引用.如果它是速记$(document).ready(),是否有任何特殊原因可能无效?在我的测试中,似乎总是在准备好的事件之前开火.

Kyl*_*man 531

简写是:

$(function() {
    // Code here
});
Run Code Online (Sandbox Code Playgroud)

  • 第一个参数是`$`.可能想要添加它.它对`jQuery(function($,undefined){});`有用 (24认同)
  • 知道你作为第一个参数免费得到`$`是很有用的. (10认同)
  • @raynos它不是必需的.上面的代码可以作为`$(document).ready(function(){});`的别名 (4认同)
  • 我仍然每个月左右访问一次此答案。 (2认同)

Bol*_*ock 246

$(document).ready(handler)is 的简写$(handler)(在哪里handler是一个函数).看到这里.

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

  • *技术上*它是**立即调用的函数表达式**.如果它是自我调用的,它将从内部调用自己.在网上搜索"iife",或者跳到[Cowboy Alman的着名博客文章](http://benalman.com/news/2010/11/immediately-invoked-function-expression/).详细...啧. (13认同)

Gor*_*son 88

正确的速记是这样的:

$(function() {
    // this behaves as if within document.ready
});
Run Code Online (Sandbox Code Playgroud)

你发布的代码......

(function($){

//some code

})(jQuery);
Run Code Online (Sandbox Code Playgroud)

...创建一个匿名函数并立即执行它并jQuery作为arg传入$.所有它有效地做的是获取函数内部的代码并像正常一样执行它,因为$它已经是一个别名jQuery.:d

  • 你可以说它还确保$是jQuery的别名,如果其他工具也使用$作为别名加载 (4认同)

sam*_*lux 16

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

您发布的代码将内部代码打包并使jQuery可用,$而不会污染全局命名空间.当您想在一个页面上同时使用prototype和jQuery时,可以使用此方法.

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


mor*_*gar 12

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

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

(function( $ ){
  $.fn.myPlugin = function() {
    // Do your awesome plugin stuff here
  };
})( jQuery );
Run Code Online (Sandbox Code Playgroud)

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


Tim*_*nen 11

准备好的多框架安全速记是:

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

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

  • @MikeCauser也是一个很好的方法,但是不会在`ready`上调用它,而是立即调用它 (2认同)

Edv*_*har 11

更短的变体是使用

$(()=>{

});
Run Code Online (Sandbox Code Playgroud)

where$代表 jQuery,也()=>{}就是从闭包继承的所谓的“箭头函数”this。(所以this你可能会有window而不是document。)