Если писать if (variable), то variable неявно приводится к булевому типу. Если тип переменной заранее неизвестен, то можно писать и так, тогда 0, null, undefined, '', false и некоторые другие вещи будут приводиться к false, съедая производительность. Если тип известен заранее, надо сверять с переменной/константой такого же типа для максимальной производительности.
И вообще, проверять на 0/не 0 нужно через ===0 и !==0 соответственно. Также и с boolean: ===true и !==true. Этим вы сможете избежать лишнего преобразования типов.
Против всех. Вместо того, чтобы решить конфликт цивилизованным путём, переговорами и соглашениями, начали забрасывать друг друга ракетами, то есть пакетами.
К тому же, он не поддаётся JIT-компиляции, и тратится время на парсинг нового кода. Генерировать код во время загрузки — нормально, генерировать функцию каждую рекурсию — тормоза.
Зачем в приведенном примере вообще рекурсия и даже отдельная функция? Всё можно было сделать циклом с аккумулятором. А если рекурсия разветвляющаяся (типа заливки или двоичного дерева), лучше использовать массив-стек.
Photoshop Save for Web именно так и делает, кстати.
while (number--) вообще в JS очень медленный, так как идет проверка и приведение типов.