0

查看 jQuery 的deferred.js源代码,

} else if ( !( --remaining ) ) {
    deferred.resolveWith( contexts, values );
}

!(--remaining)比较有什么作用?

https://stackoverflow.com/a/4943788/115988,它看起来像是一个“令人困惑”的速记布尔检查?

4

3 回答 3

3

它正在检查值remaining是否不等于0(同时也减少值)。

本质上它是这样做的:

...
else if ( remaining -= 1 && !( remaining ) ) { 
    deferred.resolveWith( contexts, values );
}
于 2012-07-25T19:15:14.870 回答
0

!(--remaining)

!非真测试

-- 减量

--> 减少剩余然后测试它是否== 0。

于 2012-07-25T19:19:06.133 回答
-1

更容易阅读的版本!(--remaining),需要分析性能。

                } else if( remaining > 0 ) {
                    --remaining;

                    // if --remaining === 0, then resolve Deferred
                    if( remaining === 0 ) {
                        deferred.resolveWith( contexts, values );
                    }
                }
于 2012-07-25T19:33:01.807 回答