自执行函数 jquery 与 JavaScript 的区别

self executing function jquery vs javascript difference

本文关键字:JavaScript 区别 jquery 执行 函数      更新时间:2023-09-26

两者有什么区别 -

第一:-

(function () {
    var Book = 'hello';
}());

第二:-

(function () {
    var Book = 'hello';
})();

第一个和第二个是相似的一些工作方式..

第三:-

(function ($) {
    var Book = 'hello';
})(jQuery);

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

我从第三个"带有参数"jQuery"的自执行函数"中理解的......

任何人都可以给我一些关于立即调用的函数表达式 (IIFE) 的想法。

谢谢!!

在所有情况下,您都在执行匿名功能。我认为 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();

称为闭包,以避免与其他库(例如使用$的库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.

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

如果仅使用变量或函数一次,则无需使其可用于其余代码(例如,因此您可以进行私有访问)。对于函数,您可以让它们匿名,如下所示:

(function(){
  console.log("Hello symfony world!");
}());

请通过此链接查看

此外,这是一个不到 7 分钟的有用解释性视频

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

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

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

docwin$myModule是注入变量。使用这种模式,更改任何注入的组件都很简单。喜欢这个

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

就像其他答案所说的那样,在第三个函数中,您将JQuery传递给函数。

我想花点时间解释一下为什么前两者是相同的。

创建函数时,该函数的名称实际上是一个函数指针。例如,在 function foo(){} 中,foo 是指向您刚刚创建的函数的指针(它解释了这样的事情)。您可以通过在函数名称末尾添加括号来取消引用该指针(从而执行函数):foo()

因此,如果我们再次查看该代码,在第一项中,首先创建函数:

function () {
    var Book = 'hello';
}

然后你取消引用它,有效地执行函数:()

在第二个示例中,您将整个函数创建括在括号中:

(function () {
    var Book = 'hello';
})

这可确保在下一个命令之前执行创建操作,即再次取消引用函数:() 。在这种情况下,括号并不是真正必要的,因为无论如何都会在执行函数之前创建函数。

所有三个示例都是立即调用的函数表达式 (IIFE)。

唯一的区别是,在第三个示例中,jQuery作为变量传入,允许您使用其美元命名约定在 IIFE 内使用它。

例如
(function ($) {
  var Book = 'hello';
  $('#bookelement').html(Book);
})(jQuery);

这些都是自执行函数。现在也称为立即调用的函数表达式 (IIFE)。

前两个完全相同,语法略有不同,第三个是将parameter作为jQuery对象传递。

事实上,这三个都是自执行函数,ti 实际上取决于你需要做什么。

两者之间的唯一区别是 3 之间。 1 和 2 是相同的。

与 3 的区别在于,您将对 jquery 的引用作为参数传递。现在这个烦恼函数中的所有函数都可以访问 jque

所有这些都是自调用函数的示例。

这将使您清楚地看到:-

var my_func = function(){
    var internal_var = "Hello";
    return internal_var;
};
var my_func2 = function(name){
    var internal_var = "Hello";
    return internal_var;
};
var long_var_name = "I can be some object or number or object or array";
var result1 = (my_func());
var result2 = (my_func)();
var result3 = (my_func2)(long_var_name);
console.log(result1, result2, result3);

使用此示例,您可以将其与第一第二第三方法进行比较。