IIFE vs函数调用(带参数),在循环内

IIFE vs function call (with parameters), inside a loop

我对在 for 循环中使用 IIFE 还是使用普通函数调用(带参数)感到困惑。

假设函数是 -

function print_doc_count(i){
    var str= "collection" + i.toString();
    db.collection(str).count(function(err, res){
        if(!err){
            console.log("docs in collection: "+str+" = "+res);
        }
    });
}


示例 1(没有 IIFE)-

for(var i=1; i<=10; i++){
    print_doc_count(i);
}

示例 2(使用 IIFE)-

for(var i=1; i<=10; i++){
    (function print_doc_count(i){
        var str= "collection" + i.toString();
        db.collection(str).count(function(err, res){
            if(!err){
                console.log("docs in collection: "+str+" = "+res);
                // str needed closure, it contains the value i!
            }
        });
    })(i);
}


我的问题是上面的示例 1 和示例 2 之间有什么区别,应该优先选择一个(在什么情况下)?

正如@Kevin B 在对该问题的评论中所述,示例 1(没有 IIFE)是更好的解决方案

function print_doc_count(i){
    var str= "collection" + i.toString();
    db.collection(str).count(function(err, res){
        if(!err){
            console.log("docs in collection: "+str+" = "+res);
        }
    });
}

for(var i=1; i<=10; i++){
    print_doc_count(i);
}