为什么这个callback函数不会引起竞态条件?

我不明白为什么下面的代码不会导致潜在的竞争条件。 它看起来像counttotalBytes是可以通过多个callback函数访问的variables,我觉得totalBytes += stats.sizetotalBytes += stats.size可能会导致竞争,因为你不能保证传递给fs.stat()的callback函数的fs.stat() (因为它是一个IO操作)。

 var fs = require('fs'); var count = 0, totalBytes = 0; function calculateByteSize() { fs.readdir(".", function (err, filenames) { var i; count = filenames.length; for (i = 0; i < filenames.length; i++) { fs.stat("./" + filenames[i], function (err, stats) { totalBytes += stats.size; count--; if (count === 0) { console.log(totalBytes); } }); } }); } calculateByteSize(); 

JavaScript只有一个线程,因此一次只能调用一个callback。 callback顺序,但是,不能保证。