JSFiddle - React, Tailwind, and code Playground

HTML

<textarea id="out"></textarea>

CSS

html,body,textarea{width:100%;height:100%;border:0;}

JavaScript

function lazyProduct(sets, holla) {
    var setLength = sets.length;
    function helper(array_current, set_index) {
        if (++set_index >= setLength) {
            holla.apply(null, array_current);
        } else {
            var array_next = sets[set_index];
            for (var i=0; i<array_next.length; i++) {
                helper(array_current.concat(array_next[i]), set_index);
            }
        }
    }
    helper([], -1);
}

var jsfiddle_output = document.getElementById('out'), jsfiddle_out;

var sets = [ [2,3,4,5], ['sweet','ugly'], ['cats','dogs','hogs'] ];
function holla( n, adj, noun ){
    jsfiddle_output.value += (jsfiddle_out = [n,adj,noun].join(' ')) + '\n';
    console.log( jsfiddle_out );
}

lazyProduct(sets,holla);


//JSFiddle demo: