Сообщение от DjDiablo
			 
		
	 | 
	
		Интересно а оправдан ли чем то вот такой подход (просто в голову стукнуло). 
Здесь кодогенерация сведена к минимуму, а расходы памяти такие же как если бы все функции были бы объявлены заранее. 
 
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));
	 | 
	
Есть кейсы где оправдан, но твой пример не учитывает слишком много нюансов.
В своём 
Collection я уже давно ввёл поддержку 
строковых сокращений для фильтров в дополнение к простым функциям:
$C([1,2,3]).get(':el > 2');
Или же:
$C().addFilter({
    'filter1': function () {},
    'filter2': function () {},
    'filter3': function () {},
    'filter4': 'filter3 || filter2'
});
$C([1,2,3]).get('filter1 && filter2 || filter4');
Первый вариант на практике оказался очень удобным применительно в шаблонах:
https://github.com/kobezzza/Snakeskin#foreach-1
но в JS с введением Arrow Function от него мало проку.
А вот второй вариант оказался очень удобным и я регулярно его использую.