javascript中使用jquery的匿名函数

时间:2013-10-03 07:12:21

标签: javascript jquery

有什么区别 我知道全局jQuery作为$传递给函数,

(function($){

})(jQuery);

和这一个

$(function(){

})();

5 个答案:

答案 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(“揭示模块”模式)。但有时,模块完全是自包含的,不提供任何外部方法来调用。

check this

答案 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的调用,传入一个函数,它应该在文档加载完毕后执行。