自动执行function的jQuery与JavaScript的区别

有什么区别 –

第一: –

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

第二:-

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

第一和第二个类似的工作..

第三:

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

什么样的模式,我需要使用和在我的编码..第三模块模式,我看到,当我正在阅读一篇文章相关的backboneJS。

我从第三个“自动执行函数的参数”jQuery“”了解… ….

任何请给我一些关于立即调用函数expression式(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. 

即时调用函数expression式(IIFE)是JavaScript的核心function之一。 其主要目的不是将名称空间与一次性函数和variables混为一谈。

如果仅使用一次variables或函数,则不需要将其用于代码的其余部分(例如,因此您可以进行私有访问)。 在function的情况下,你可以让他们匿名,就像下面这样:

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

请检查这个链接

就像所有其他答案一样,在第三个函数中,您正在将JQuery传递给函数。

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

当你创build一个函数时,那个函数的名字实际上是一个函数指针。 例如,在function foo(){}foo是一个指向你刚刚做出的函数的指针(这就解释了这个东西)。 您可以通过在函数名称的末尾添加圆括号来取消引用该指针(从而执行该函数): foo()

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

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

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

在第二个示例中,将括号中的整个函数创build括起来:

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

这可以确保您在下一个命令之前执行创build操作,即再次解除引用该function:( () 。 在这种情况下括号并不是真正必要的,因为函数在被执行之前将被创build。

所有这三个例子都是立即调用函数expression式 ( IIFE )。

唯一的区别是在第三个例子中, jQuery被作为一个variables传入,允许你在IIFE中使用它的美元命名约定。 例如

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

正如其他答案指出,他们都是自我执行的匿名function或即时匿名function。

第三个例子是用来为函数外部的variables创build别名。 这是防止名称冲突和创build代码的好方法,可以轻松更改函数中使用的模块。 它本质上是一种dependency injection的forms。

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

docwin$myModule是注入variables。 有了这个模式,改变任何注入的组件都是微不足道的。 喜欢这个

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

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

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

实际上,这三者都是自动执行function,而且真正取决于你需要做什么。

唯一的区别是在3.1和2之间是相同的。

与3的不同之处在于你传递了一个对jquery的引用作为参数。 现在这个annoyomus函数中的所有函数都可以访问jque