是否有理由使用名为的自我调用函数?
例如:
(function foo()
{
alert('Hello World! Named Self Invoking Function Here');
})();
就我的学习而言,这与匿名自我调用函数相同,没有额外的优点(你不能在调用之后再调用它),并且没有额外的缺点,因为它没有“污染” “全球范围(我认为)。
有没有时候命名一个像上面这样的自调用函数是有意义的?
答案 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