//forloop.jsvarfs=require('fs');varfiles=['a.txt','b.txt','c.txt'];for(vari=0;i
2 回答
精慕HU
TA贡献1845条经验 获得超8个赞
forEach里是个function里面filename是闭包变量所以不会变varfs=require('fs');varfiles=['a.txt','b.txt','c.txt'];for(vari=0;ivarfun=function(fileName){ fs.readFile(fileName,'utf-8',function(err,contents){console.log(fileName+':'+contents);});}fun(files[i]);}
沧海一幻觉
TA贡献1824条经验 获得超5个赞
这个跟js的语法有关,第一个出错,是由于for循环结束之后,fs.readFile的回调函数才会触发,这个时候i==files.length,但是files[files.length]为undefined(对于异步的一些概念可以参考我的文章,js异步解惑)。第二个正确是由于对于每个forEach循环来说,fs.readFile都是在forEach内部的闭包函数内运行的,对于每个闭包函数来说filename都是闭包内部变量,不相互影响。
添加回答
举报
0/150
提交
取消