2 ms·
I'm more disappointed that it doesn't short-circuit the operation at all. It applies all the functions, THEN it determines whether all of them passed. Even wors
by jdmichal 11y ago
I'm more disappointed that it doesn't short-circuit the operation at all. It applies all the functions, THEN it determines whether all of them passed. Even worse, it uses `every` (which does short-circuit) to determine that all the functions are, indeed, functions, but apparently the ability to use that function to determine whether every predicate passes was missed.
- jacobolus 11y agoIt could have been a simple for loop with a break whenever one evaluates false. Blazing fast in every javascript engine, and easy to see all the code in one place. Instead, it’s a slow tower of bloat, which you need to read 5 files to reason about. Javascript implementation: function passAll() { var fns = [].slice.call(arguments); return function() { for (var i = 0, len = fns.length; i < len; i++) { if (!fns[i].apply(null, arguments)) { return false; } } return true; }; } Or Coffeescript (including the function check): passAll = (fns...) -> for fn in fns then if typeof fn isnt 'function' throw new TypeError 'all funcs should be functions' (args...) -> (return false if not fn args...) for fn in fns true