我有这段代码:
var walk = function(dir, done) { var results = []; fs.readdir(dir, function(err, list) { if (err) return done(err); var pending = list.length; if (!pending) return done(null, results); list.forEach(function(file) { file = path.resolve(dir, file); fs.stat(file, function(err, stat) { if (stat && stat.isDirectory()) { walk(file, function(err, res) { results = results.concat(res); if (!--pending) done(null, results); }); } else { results.push(file); if (!--pending) done(null, results); } }); }); }); };
我正在努力追随它,我想我什么都懂,除了它说的结尾!--pending。在这种情况下,该命令有什么作用?
!--pending
编辑:我感谢所有进一步的评论,但这个问题已经回答了很多次。不管怎么说,还是要谢谢你!
!反转一个值,并为您提供相反的布尔值:
!
!true == false !false == true !1 == false !0 == true
--[value]从数字中减去一 (1),然后返回要使用的数字:
--[value]
var a = 1, b = 2; --a == 0 --b == 1
因此,!--pending从待处理中减去一个,然后返回其真值/假值的相反值(无论它是否为0)。
0
pending = 2; !--pending == false pending = 1; !--pending == true pending = 0; !--pending == false
是的,请遵循 ProTip。这在其他编程语言中可能是一个常见的习惯用法,但对于大多数声明式 JavaScript 编程来说,这看起来很陌生。