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

时间:2013-10-21 10:10:32

标签: javascript jquery iife

-

之间有什么区别

首先: -

(function () {

    var Book = 'hello';

}());

第二: -

(function () {

    var Book = 'hello';

})();

第一和第二类似的工作方式......

第三: -

(function ($) {

    var Book = 'hello';

})(jQuery);

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

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

有任何关于立即调用函数表达式的信息(IIFE)

谢谢!

9 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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.

答案 2 :(得分:7)

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

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

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

Please check with this link

答案 3 :(得分:4)

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

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

(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

答案 4 :(得分:4)

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

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

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

因此,如果我们再次查看该代码,首先要创建函数:

function () {

    var Book = 'hello';

}

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

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

(function () {

    var Book = 'hello';

})

这可确保您在下一个命令之前执行创建操作,即再次取消引用该函数:()。在这种情况下,括号不是必需的,因为函数将在执行之前创建。

答案 5 :(得分:3)

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

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

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

答案 6 :(得分:1)

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

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

答案 7 :(得分:0)

事实上,这三个都是自我执行的功能,而且真的取决于你需要做什么。

唯一区别在于3. 1和2之间是相同的。

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

答案 8 :(得分:0)

所有这些都是自我调用功能的例子。

这将为您提供清晰的视图: -

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);

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