@ZaxapKramer
Больной верстальщик

Как можно уйти от использования Function (new Function) в JavaScript, написав то же самое «обычной функцией»?

Использую Function при написании шаблонизатора, дабы подменять текст на логику, что весьма удобно и делает код коротким, но такой код при усложнении логики становится плохо поддерживаемым.
Речь идет о подобном, только с более сложной логикой (это - весьма читаемый пример):
var template = function(a) {
	return Function("o","o="+JSON.stringify(a).replace(/<%=(.+?)%>/g,'"+($1)+"').replace(/<%(.+?)%>/g,'";$1\no+="')+";return o")
};

Можно ли как-то это переписать? Есть идеи?
Заранее спасибо:)
  • Вопрос задан
  • 224 просмотра
Решения вопроса 2
@lega
Function используют для "компиляции" выражения/функционала, таким образом можно сделать непосредственное выполнение нужного кода, вместо его "интерпритации", что дает большую производительность и экономию памяти.
Да, можно сделать аналогичный функционал храня данные в замкнутых переменных интерпретирую функционал, но работать будет медленнее.
Ответ написан
Комментировать
risentveber
@risentveber
fullstack web developer
Используйте замыкания:
var template = function(a) {
  var result = JSON.stringify(a);
  result = result.replace(/<%=(.+?)%>/g,'"+($1)+"');
  result = result.replace(/<%(.+?)%>/g,'";$1\no+="');
  return function(){
    return result;
  };
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы