有什么区别 我知道全局jQuery作为$传递给函数,
(function($){
})(jQuery);
和这一个
$(function(){
})();
答案 0 :(得分:3)
第二个不是常见模式(它会抛出一个类型错误),除非你错误地包含了调用括号:
(function($){
// Normal IIFE that happens to pass jQuery in as an argument
})(jQuery);
$(function(){
// Shorthand DOM-ready event handler
}); // <-- Remove the invoking parentheses
答案 1 :(得分:1)
<强> $(函数(){ //这里的骨干代码 }); :强>
这是jQuery’s “DOMReady”函数的别名,当DOM准备好由JavaScript代码操作时执行该函数。这允许您编写需要DOM的代码,知道DOM可用并且可以随时被应用程序读取,写入和修改。
但这不是一个模块。这只是传递给DOMReady别名的回调函数。在这种情况下,模块和回调之间的主要区别在于jQuery等待DOM准备就绪,然后在适当的时候调用回调函数 - 所有这些都来自jQuery的上下文 - 同时模块模式或立即调用函数在定义后立即执行。在上面的例子中,模块接收jQuery作为参数,但这与使用jQuery的DOMReady事件不同,因为模块函数被调用,立即传入jQuery作为参数。它不等待DOM准备好。它在解析函数后立即执行。
(function($){ //这里的骨干代码 })(jQuery的); 强>
这是一个立即调用的函数表达式(FKA“匿名函数”,“自调用函数”等)。
这是一个由调用(jQuery)括号立即调用的函数。将jQuery传递给括号的目的是为全局变量提供本地范围。这有助于减少查找$变量的开销,并允许在某些情况下更好地压缩/优化minifiers。
在这种情况下,该函数被用作JavaScript“模块”模式。大多数浏览器中当前实现的JavaScript版本中的模块不是像函数那样的特定构造。相反,它们是一种实现模式,它使用立即调用的函数来围绕相关功能的“模块”提供范围和隐私。模块通常通过从模块的函数返回一个对象来暴露公共API(“揭示模块”模式)。但有时,模块完全是自包含的,不提供任何外部方法来调用。
答案 2 :(得分:1)
$(function(){
});
这只是DOM-ready事件处理程序的简写,它相当于:
$(document).ready(function(){
// execution when DOM is loaded...
});
现在结束:
(function($){
// code here
})(jQuery);
此代码不会在DOM就绪时执行,但会直接执行。将jQuery作为参数传递给函数的优点是避免与美元符号($
)的使用冲突,因为多个库将其用作速记引用。函数内的所有内容都可以安全地使用$
,因为它是作为jQuery
的引用传递的。
详细了解$
符号上的冲突:jQuery noConflict
如果您将两个代码段组合在一起,您将获得一个漂亮而可靠的设置:
// $ reference is unsafe here in the global scope if you use multiple libraries
(function($){
// $ is a reference to jQuery here, passed in as argument
$(function(){
// executed on dom-ready
});
})(jQuery);
PS :因为JavaScript中的function
既可以是语句也可以是表达式,因此根据上下文,大多数人会在其周围添加额外的括号以强制它成为表达式。
答案 3 :(得分:1)
当js解析器遇到它时,第一个剪辑集会执行“function($){...}”,在其中创建一种私有上下文,其中$ argument var将指向jQuery,因为它作为参数传递“( jQuery)“(如果你想避免与先前声明的$ var发生任何冲突,这将引用除jQuery对象之外的其他东西,这很有用)
第二个看起来像JQuery.ready函数调用,但语法错误。有两种方法可以将它写成实际
$(document).ready(function(){
/* DOM has loaded */
});
$(function(){
/* DOM has loaded */
});
答案 4 :(得分:0)
(function ($)
})(jQuery);
它定义了一个函数,然后立即调用,将JQuery对象作为参数传入。 $是对JQuery的引用,然后您可以在函数内部使用它。它等同于:
var Test = function ($){};
Test(jQuery);
和此:
$(function (){
});
是对JQuery的调用,传入一个函数,它应该在文档加载完毕后执行。