javascript中带有jquery的匿名函数
javascript中带有jquery的匿名函数,javascript,jquery,Javascript,Jquery,之间的区别是什么 我知道这里全局jQuery作为$to函数传递 (function($){ })(jQuery); 这个呢 $(function(){ })(); 第二个不是通用模式(它将抛出类型错误),除非您错误地包含了调用括号: (function($){ // Normal IIFE that happens to pass jQuery in as an argument })(jQuery); $(function(){ // Shorthand DOM-re
之间的区别是什么 我知道这里全局jQuery作为$to函数传递
(function($){
})(jQuery);
这个呢
$(function(){
})();
第二个不是通用模式(它将抛出类型错误),除非您错误地包含了调用括号:
(function($){
// Normal IIFE that happens to pass jQuery in as an argument
})(jQuery);
$(function(){
// Shorthand DOM-ready event handler
}); // <-- Remove the invoking parentheses
(函数($){
//作为参数传入jQuery的正常IIFE
})(jQuery);
$(函数(){
//速记DOM就绪事件处理程序
}); //
它定义了一个函数,然后立即调用,并将JQuery对象作为参数传入。$是对JQuery的引用,您可以在函数中使用它。这相当于:
var Test = function ($){};
Test(jQuery);
这是:
$(function (){
});
是对JQuery的调用,传入一个函数,在文档加载完成后应该执行该函数。$(function(){
//这里有主干代码
}); :强>
这是一个函数的别名,当DOM准备好被JavaScript代码操纵时执行。这允许您编写需要DOM的代码,同时知道DOM是可用的,可以被应用程序读取、写入或修改
不过,这不是一个模块。这只是传递给DOMReady别名的回调函数。在本例中,模块和回调之间的主要区别在于jQuery等待DOM就绪,然后在适当的时间调用回调函数——所有这些都来自jQuery的上下文——而模块模式或立即调用函数在定义后立即执行。在上面的示例中,模块接收jQuery作为参数,但这与使用jQuery的DOMReady事件不同,因为模块函数被调用,并作为参数传入jQuery。它不会等待DOM准备就绪。它在解析函数后立即执行
(函数($){
//这里有主干代码
})(jQuery);:强>
这是一个立即调用函数表达式(FKA“匿名函数”、“自调用函数”等)
这个函数的实现是一个由调用(jQuery)括号立即调用的函数。将jQuery传入括号的目的是为全局变量提供局部作用域。这有助于减少查找$variable的开销,并在某些情况下允许更好地压缩/优化minifier
在本例中,函数被用作JavaScript“模块”模式。大多数浏览器中当前实现的JavaScript版本中的模块与函数不同,不是特定的结构。相反,它们是一种实现模式,使用一个立即调用的函数来提供相关功能的“模块”的范围和隐私。模块通过从模块的函数返回一个对象来公开一个公共API——“显示模块”模式是很常见的。但有时,模块是完全自包含的,不提供任何外部方法来调用
这只是DOM就绪事件处理程序的简写,相当于:
$(document).ready(function(){
// execution when DOM is loaded...
});
现在来谈谈这个问题:
(function($){
// code here
})(jQuery);
这段代码不会在DOM就绪上执行,而是直接执行。将jQuery作为参数传递到函数中的好处是避免与美元符号($
)的使用发生冲突,因为多个库将其用作速记引用。函数中的所有内容都可以安全地使用$
,因为这是作为jQuery
的引用传入的
阅读有关$
符号冲突的更多信息:
如果您将这两个代码段组合在一起,您将得到一个漂亮而可靠的设置:
// $ 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
既可以是语句也可以是表达式,这取决于上下文,所以大多数人会在其周围添加额外的括号以强制其成为表达式。当js解析器遇到它时,第一个剪贴集将执行“function($){…}”,在其中创建一种私有上下文,其中$argument var将指向jQuery,因为它是作为参数(jQuery)传递的(如果您希望避免与先前声明的$var发生任何冲突,而该$var将引用jQuery对象以外的其他对象,这将非常有用)
第二个类似于JQuery.ready函数调用,但有语法错误。实际上,有两种方法可以写出它
$(document).ready(function(){
/* DOM has loaded */
});
$(function(){
/* DOM has loaded */
});
$(函数(){})()
不等于DOM Ready,必须在end@muneebShabbir说得好。不确定如果添加这些括号会发生什么。我来看看JSFIDLE。
// $ 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);
$(document).ready(function(){
/* DOM has loaded */
});
$(function(){
/* DOM has loaded */
});