下面$(document).的简写准备好了吗?
(function($){
//some code
})(jQuery);
我看到这个模式被使用了很多次,但我找不到任何参考资料。如果它是$(document).ready()的简写,是否有什么特别的原因它可能不起作用?在我的测试中,它似乎总是在就绪事件之前发射。
下面$(document).的简写准备好了吗?
(function($){
//some code
})(jQuery);
我看到这个模式被使用了很多次,但我找不到任何参考资料。如果它是$(document).ready()的简写,是否有什么特别的原因它可能不起作用?在我的测试中,它似乎总是在就绪事件之前发射。
当前回答
这些特定的行是jQuery插件的常用包装:
"...为了确保你的插件不会与其他可能使用美元符号的库冲突,最好将jQuery传递给一个自执行函数(闭包),将它映射到美元符号,这样它就不会被其他库在它的执行范围内覆盖。”
(function( $ ){
$.fn.myPlugin = function() {
// Do your awesome plugin stuff here
};
})( jQuery );
从http://docs.jquery.com/Plugins/Authoring
其他回答
简写如下:
$(function() {
// Code here
});
这个呢?
(function($) {
$(function() {
// more code using $ as alias to jQuery
// will be fired when document is ready
});
})(jQuery);
这不是$(document).ready()的简写。
您发布的代码包含内部代码,并在不污染全局名称空间的情况下将jQuery作为$可用。当你想在一个页面上同时使用prototype和jQuery时,可以使用这个选项。
记录在这里:http://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/#use-an-immediately-invoked-function-expression
$(document).ready(handler)的简写是$(handler)(其中handler是一个函数)。在这里看到的。
您问题中的代码与.ready()无关。相反,它是一个立即调用的函数表达式(IIFE),以jQuery对象作为参数。它的目的是将至少$变量的作用域限制在它自己的块中,这样就不会引起冲突。您通常会看到jQuery插件使用的模式,以确保$ == jQuery。
更短的变体是使用
$(()=>{
});
其中$代表jQuery,()=>{}是所谓的“箭头函数”,从闭包继承这个。(在这里你可能会用window而不是document)