Functional, recursive FizzBuzz in JavaScript
Functional programming is not about writing as many functions as you can. I would suggest to start with a function library (e.g. Ramda) and write as few new functions as needed, taking advantage of currying.

Obviously, your loop function has side effects: it modifies result and i.

Without going to deep into FP rabbit hole, your function could look like this:



function getFizzBuzzArray() {
    function getFizzBuzz(v) {
        var ret = R.concat(
          v % 3 === 0 ? 'fizz' : '',
          v % 5 === 0 ? 'buzz' : ''
        );

        return ret || v;
    }
  
    return R.map(getFizzBuzz, R.range(1, 101));
}

document.write(getFizzBuzzArray());
&lt;script src="https://cdn.jsdelivr.net/ramda/0.18.0/ramda.min.js"&gt;&lt;/script&gt;