以下是$(document).ready
的缩写吗?
(function($){
//some code
})(jQuery);
我看到这种模式使用了很多,但我找不到任何引用。如果它是$(document).ready()
的简写,是否有任何特殊原因可能无效?在我的测试中,似乎总是在准备好的事件之前开火。
答案 0 :(得分:511)
简写是:
$(function() {
// Code here
});
答案 1 :(得分:243)
$(document).ready(handler)
的简写是$(handler)
(其中handler
是一个函数)。请参阅here。
您问题中的代码与.ready()
无关。相反,它是一个立即调用的函数表达式(IIFE),其中jQuery对象作为其参数。其目的是将至少$
变量的范围限制为它自己的块,这样就不会引起冲突。您通常会看到jQuery插件使用的模式,以确保$ == jQuery
。
答案 2 :(得分:84)
正确的简写是:
$(function() {
// this behaves as if within document.ready
});
您发布的代码......
(function($){
//some code
})(jQuery);
...创建一个匿名函数并立即执行它,jQuery
作为arg $
传入。所有它有效地做的是获取函数内部的代码并像平常一样执行它,因为$
已经是jQuery
的别名。 :d
答案 3 :(得分:16)
这不是$(document).ready()
的简写。
您发布的代码在内部代码中打包,并使jQuery可用$
而不会污染全局命名空间。当你想在一个页面上同时使用prototype和jQuery时,可以使用它。
答案 4 :(得分:12)
这些特定行是jQuery插件的常用包装器:
“...为了确保您的插件不会与可能使用美元符号的其他库发生冲突,最好将jQuery传递给自动执行函数(闭包),将其映射到美元符号,这样它不能被执行范围内的另一个库覆盖。“
(function( $ ){
$.fn.myPlugin = function() {
// Do your awesome plugin stuff here
};
})( jQuery );
答案 5 :(得分:10)
准备好的多框架安全速记是:
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
变量的框架
答案 6 :(得分:0)
使用更短的变体
$(()=>{
});
其中$
代表jQuery,而()=>{}
则称为'arrow function',它从闭包中继承了this
。 (因此,在this
中,您可能会使用window
而不是document
。)
答案 7 :(得分:-1)
这个怎么样?
(function($) {
$(function() {
// more code using $ as alias to jQuery
// will be fired when document is ready
});
})(jQuery);