JSFiddle - React, Tailwind, and code Playground

JavaScript

var sets = [ [2,3,4,5], ['sweet','ugly'], ['cats','dogs','hogs'] ];

lazyProduct( sets, holla );
document.close();

function holla( n, adj, noun ){
  document.write( [n,adj,noun].join(' ')+"<br>" );
}

function lazyProduct(arrays,callback,values){
  if (!values) values=[];
  var head = arrays[0], rest = arrays.slice(1), dive=rest.length>0;
  for (var i=0,len=head.length;i<len;++i){
    var moreValues = values.concat(head[i]);
    if (dive) lazyProduct(rest,callback,moreValues);
    else      callback.apply(this,moreValues);
  }
}