美元(文档)。准备好了速记

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

(function($){


//some code


})(jQuery);

我看到这个模式被使用了很多次,但我找不到任何参考资料。如果它是$(document).ready()的简写,有没有什么特殊的原因它可能不起作用?在我的测试中,它似乎总是在就绪事件之前发射。

179620 次浏览

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

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

简写如下:

$(function() {
// Code here
});

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

你发布的代码框内部代码,使jQuery可用$而不污染全局命名空间。当你想在一个页面上同时使用prototype和jQuery时,可以使用这个选项。

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

正确的简写是这样的:

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

你发布的代码…

(function($){


//some code


})(jQuery);

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

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

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

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

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

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不是唯一使用$undefined变量的框架

这个呢?

(function($) {
$(function() {
// more code using $ as alias to jQuery
// will be fired when document is ready
});
})(jQuery);

更短的变体是使用

$(()=>{


});

其中$代表jQuery, ()=>{}被称为“箭头功能”,它从闭包继承了this。(所以在this中,你可能会有window而不是document。)