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