Интересно а оправдан ли чем то вот такой подход (просто в голову стукнуло).
Здесь кодогенерация сведена к минимуму, а расходы памяти такие же как если бы все функции были бы объявлены заранее.
function F(args, body) {
F.cache=F.cache||{};
F.cache[args+body]=F.cache[args+body]||new Function(args, "return " + body);
return F.cache[args+body];
}
alert(F("x,y","x+y")(1, 2));