自我执行函数jquery vs javascript的区别

Jav*_*der 42 javascript jquery iife

有什么区别 -

第一: -

(function () {

    var Book = 'hello';

}());
Run Code Online (Sandbox Code Playgroud)

第二:-

(function () {

    var Book = 'hello';

})();
Run Code Online (Sandbox Code Playgroud)

第一和第二类似于一些如何工作..

第三: -

(function ($) {

    var Book = 'hello';

})(jQuery);
Run Code Online (Sandbox Code Playgroud)

我需要使用什么模式以及在编码中的位置.我在阅读与backboneJS相关的文章时看到的第三个模块模式.

我从第三个"自我执行函数与参数"jQuery""理解....

请问有关立即调用函数表达式(IIFE)的一些信息.

谢谢 !!

Jor*_*lom 29

在所有情况下,您都在执行匿名功能.我认为1与2相同.在第三种情况下,您将jQuery作为参数传递.当你想在你的函数范围内封装jQuery时,就完成了这个.

例如,在您的应用程序中,jQuery var可能是jQuery.但是在您的匿名函数中,您可能希望将其用作$.

(function ($) {
    //Here jQuery is $
    var Book = $(document.body).text();    

})(jQuery);

//Out of your function, you user jQuery as jQuery (in this example)
var Book = jQuery(document.body).text();
Run Code Online (Sandbox Code Playgroud)


Jai*_*Jai 9

这称为闭包,以避免与mootools正在使用的其他库冲突$.这样,您可以确保$在该函数中使用jQuery作为参数传递.

(function ($) {
   $(function () { // Here in this block you can use '$' in place of jQuery
    .......
   });
})(jQuery); //<----passing jquery to avoid any conflict with other libraries.
Run Code Online (Sandbox Code Playgroud)


Nei*_*eil 7

立即调用的函数表达式(IIFE)是JavaScript的核心功能之一.它的主要目的不是用一次性函数和变量来混淆命名空间.

如果您只使用一个变量或函数一次,则不需要使其可用于其余代码(例如,您可以进行私有访问).如果是函数,您可以让它们匿名,如下所示:

(function(){
  console.log("Hello symfony world!");
}());
Run Code Online (Sandbox Code Playgroud)

请查看此链接


Hug*_*ius 5

正如其他答案所指出的,它们都是自执行匿名函数或直接匿名函数。

第三个示例用于为函数外部的变量创建别名。这是防止名称冲突并在可能容易更改函数中使用的模块的地方创建代码的好方法。它本质上是依赖注入的一种形式。

(function (doc, win, $, myModule) {
    // Code
}(document, window, jQuery, window.MYAPP.myModule));
Run Code Online (Sandbox Code Playgroud)

docwin$myModule注入的变量。使用这种模式,更改任何注入的组件很简单。像这样

(function (doc, win, $, myModule) {
    // Code
}(document, window, jQuery, window.MYAPP.myModule2)); //Use myModule2 instead myModule
Run Code Online (Sandbox Code Playgroud)