Почему в результате получается 1?
Потому что в функции ones() сначала выполняется (1 + foo) || 1 вместо 1 + (foo || 1)
Достаточно поставить скобки в правильном месте
Вот, изучите. А потом подумайте - может, скобки где забыли поставить.