In languages which are functionally-focused enough that tail call optimization can be relied upon, higher-order functions are usually available and a better solution. See my post higher up.
When you are doing simple maps/filters whatever, then yeah, higher order functions all the way.