查看 jQuery 的deferred.js源代码,
} else if ( !( --remaining ) ) {
deferred.resolveWith( contexts, values );
}
!(--remaining)比较有什么作用?
从https://stackoverflow.com/a/4943788/115988,它看起来像是一个“令人困惑”的速记布尔检查?
查看 jQuery 的deferred.js源代码,
} 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。
更容易阅读的版本!(--remaining),需要分析性能。
} else if( remaining > 0 ) {
--remaining;
// if --remaining === 0, then resolve Deferred
if( remaining === 0 ) {
deferred.resolveWith( contexts, values );
}
}