Во многих языках, таких как лисп или тикль, например, принято расширять язык управляющими конструкциями. Эти конструкции, реализуют более удобный функционал, или функционал, заточенный под определенную задачу. К сожалению, в javascript эта практика не слишком распространена, а между тем, я заметил, что в JS это вполне возможно, и даже удобно. Например, есть цикл for in. Тут сразу бросается в глаза то, что в качестве переменной-итератора, можно использовать любое имя, и обычно используется имя i или name. Ясно, что писать это явным образом не нужно, но для этого мы должны сделать некоторое обобщение и реализовать его в виде процедуры. Например:
print=console.log
for_each=function(ob, expr){for(var name in ob){value=ob[name]; eval(expr)}}
for_each({a: 1, b: 2}, "print(name+': '+value)")
// a: 1
// b: 2
for_each([1,2,3,4,5], "if(value!==3) print(name+': '+value)")
// 0: 1
// 1: 2
// 3: 4
// 4: 5
Тут есть даже некоторое преимущество перед CL и Scheme, поскольку конструкция реализуется в виде обычной функции, и, соответственно не требует препроцессора, а значит, является органичным языковым объектом, а не прибитым гвоздями костылем, существующем исключительно в компилтайме.
Тут возникает вопрос производительности. Однако, для прототипирования, реализации логики, производительность не имеет значения. Реализовав сложную логику, мжно затем переписать часть кода, выявив узкие места.
Хотелось бы узнать, нет ли какой-нибудь книжки, или ресурса, где рассматриваются паттерны написания управляющих конструкций, ДСЛ-ей, метапрограммирования на JS?