下面$(document).的简写准备好了吗?

(function($){

//some code

})(jQuery);

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


当前回答

这不是$(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

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

您发布的代码包含内部代码,并在不污染全局名称空间的情况下将jQuery作为$可用。当你想在一个页面上同时使用prototype和jQuery时,可以使用这个选项。

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

简写如下:

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

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

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

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