node.js中异步导致的循环问题

//forloop.js
varfs=require('fs');
varfiles=['a.txt','b.txt','c.txt'];
for(vari=0;ifs.readFile(files[i],'utf-8',function(err,contents){
console.log(files[i]+':'+contents);
});
}
为何输出结果为:
undefined:AAA
undefined:BBB
undefined:CCC
改写成forEach
//callbackforeach.js
varfs=require('fs');
varfiles=['a.txt','b.txt','c.txt'];
files.forEach(function(filename){
fs.readFile(filename,'utf-8',function(err,contents){
console.log(filename+':'+contents);
});
});
这样结果又对了。。。这是为什么
浮云间
浏览 317回答 2
2回答

精慕HU

forEach里是个function里面filename是闭包变量所以不会变varfs=require('fs');varfiles=['a.txt','b.txt','c.txt'];for(vari=0;i

沧海一幻觉

这个跟js的语法有关,第一个出错,是由于for循环结束之后,fs.readFile的回调函数才会触发,这个时候i==files.length,但是files[files.length]为undefined(对于异步的一些概念可以参考我的文章,js异步解惑)。第二个正确是由于对于每个forEach循环来说,fs.readFile都是在forEach内部的闭包函数内运行的,对于每个闭包函数来说filename都是闭包内部变量,不相互影响。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript