var fs = require(‘fs’); var stdin = process.stdin, stdout = process.stdout; fs.readdir(process.cwd(), function (err,files) { var i = 0; console.log(files); while (i < files.length) { // file(i); //为什么必须封装到函数里,输出才是正确的? … var fn = files[i]; fs.stat(__dirname + ‘/’ + fn, function (err, stat) { if (stat.isDirectory()) { console.log(i + “.” + fn + “目录.”); } else { console.log(i + “.” + fn);
}
//...................................................
});
i++;
}
function file(i) {
var fn = files[i];
fs.stat(__dirname + '/' + fn, function (err, stat) {
if (stat.isDirectory()) {
console.log(i + "." + fn + "目录.");
}
else {
console.log(i + "." + fn);
}
});
}
});
8 回复
不封装到函数的话,在fs.stat的callback中的i是对i的引用,因此实际用到的时候值已经变成9了。如果封装成函数,那么函数中的i是在调用此函数时的值,也就是从0-8都有。 楼主可以进一步看看关于Closure的东东: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures#Creating_closures_in_loops.3a_A_common_mistake