望着jQuery的deferred.js源代码,的Javascript布尔真/假速记jQuery中
} else if (!(--remaining)) {
deferred.resolveWith(contexts, values);
}
是什么!(--remaining)比较呢?
从https://stackoverflow.com/a/4943788/115988,它看起来像是一个'混乱'的速记布尔检查?
望着jQuery的deferred.js源代码,的Javascript布尔真/假速记jQuery中
} else if (!(--remaining)) {
deferred.resolveWith(contexts, values);
}
是什么!(--remaining)比较呢?
从https://stackoverflow.com/a/4943788/115988,它看起来像是一个'混乱'的速记布尔检查?
它正在检查remaining
的值不等于0
(同时也减小值)。
本质上,它是这样做的:
...
else if (remaining -= 1 && !(remaining)) {
deferred.resolveWith(contexts, values);
}
!(--remaining)
:
!没有真正的考验
- 递减
- >递减剩余,然后测试它是否是== 0,
更容易阅读的版本!( - 剩余), 需要描述性能。
} else if(remaining > 0) {
--remaining;
// if --remaining === 0, then resolve Deferred
if(remaining === 0) {
deferred.resolveWith(contexts, values);
}
}
...而递减它。 – 2012-07-25 19:15:38
@MattBall补充说。 – Neal 2012-07-25 19:16:19
否。先递减“剩余”,然后测试。 – dda 2012-07-25 19:17:32