样式 - 用命名IIFE替换命名函数

4

我正在进行一些代码重构。我能否替换

function next () {
    // call next using setTimeout
}
next();

使用

(function next () {
    // call next using setTimeout
}());

需要启动next,并且从那里调用自身特定次数。


我不明白你的问题:你在测试第二个表单时遇到了问题吗? - Denys Séguret
第二个块似乎没有调用你的函数——它仅在一个自我调用的闭包中定义它。 - TGH
@dystroy我认为他想知道两个代码是否等效? - Grijesh Chauhan
为什么不试一下?(http://jsfiddle.net/jGxyN/) - jeremy
可能是重复的问题:命名立即调用函数表达式和直接调用命名函数之间的区别? - Ciro Santilli OurBigBook.com
1个回答

9

两者都是可行的,两者都可以实现递归调用(这就是命名IIFE的关键点)。

它们之间唯一的区别在于第二个不会用函数的名称污染外部命名空间,而只能从函数中看到。 当然,一个结果是你将无法从其他地方调用该函数。


你可以通过将整个第一个解决方案放置在自己的IIF中来消除差异间隙,我想。 - jeremy
@Nile 是的,但第二种形式更简单。 - Denys Séguret

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接