代码之家  ›  专栏  ›  技术社区  ›  vjjj

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

  •  -2
  • vjjj  · 技术社区  · 8 年前

    我对在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);
            }
        });
    }
    



    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之间的区别是什么?在什么情况下,一个应该优先于另一个?

    1 回复  |  直到 8 年前
        1
  •  0
  •   vjjj    8 年前

    正如@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);
    }