命名自我调用功能

时间:2012-06-08 10:35:59

标签: javascript self-invoking-function

是否有理由使用名为的自我调用函数?

例如:

(function foo() 
{
     alert('Hello World! Named Self Invoking Function Here');
})();

就我的学习而言,这与匿名自我调用函数相同,没有额外的优点(你不能在调用之后再调用它),并且没有额外的缺点,因为它没有“污染” “全球范围(我认为)。

有没有时候命名一个像上面这样的自调用函数是有意义的?

6 个答案:

答案 0 :(得分:11)

如果你需要一个递归的自我调用函数,那么它可能有意义:

(function loop(i) {
    console.log(i);
    i++;
    if(i < 10) {
        loop(i);
    }
})(0);

答案 1 :(得分:7)

我使用此模式定期轮询来自服务器的数据。这使代码更加混乱(尤其是setTimeout行)。

(function poll() {
  $.get("/somedata", function (data) {
    // Processing data...
    setTimeout(poll, 1000);
  });
})();

答案 2 :(得分:3)

它对递归很有用,但你应该暂时避免使用命名函数表达式。在版本9之前,Internet Explorer中不支持它们。

请参阅:http://javascript.info/tutorial/functions-declarations-and-expressions

  

“IE&lt; 9不支持NFE”

答案 3 :(得分:0)

命名自调用函数可以提高可读性。例如,在您通过自调用函数创建多个闭包的情况下,通过提供名称,它可以增加代码的可读性而不会受到损害(除了丢失旧的IE支持,如上所述。)本质上,您正在创建命名代码块,这可能是打破大功能的好方法。

如,

function bigFunction() {
   (function doTheFirstThing() {
      //code here.
   })();
   (function doTheSecondThing() {
     //code here.
   })(); 
}

答案 4 :(得分:0)

您可以将它用于初始化,首先必须运行的代码行然后它将调用另一个脚本。

答案 5 :(得分:0)

它为我们提供了一种创建递归,自执行功能的方法。在下面的演示中,我创建了一个自执行函数,该函数可以递增一个计数器,对其进行记录,然后递归调用自身:

useSpring({ ..., config: {mass: 1, tension: 500, friction: 10} });

自调用功能的另一种更常用用法是数据保密性,包装在其中的所有内容仅在这些功能的范围内可用。

有关更多详细信息,请访问https://en.wikibooks.org/wiki/JavaScript/Anonymous_functions