При рассмотрении исходного кода шаблона JavaScript я обнаружил, что есть интересное использование для создания функций. Разве это не метапрограммирование?
JavaScript MetaProgramming
Кода -копия выглядит следующим образом:
Метапреграммирование относится к написанию определенного типа компьютерной программы, которая записывает или манипулирует другими программами (или самим собой) как их данные, или завершает некоторые работы, которые должны были быть выполнены во время компиляции во время выполнения.
JavaScript Eval
Кода -копия выглядит следующим образом:
Функция eval () вычисляет строку и выполняет в ней код JavaScript.
Может быть следующее использование:
Кода -копия выглядит следующим образом:
eval ("x = 10; y = 20; document.write (x*y)")
Конечно, это просто используется для выполнения определенной функции, но этот продукт дешевле и прост в ошибках.
Кода -копия выглядит следующим образом:
Функции Eval следует избегать как можно больше.
Так что лучший способ - использовать новую функцию ()
Большая разница между использованием новой функции () и eval () заключается в том, что Eval не просто функция.
Кода -копия выглядит следующим образом:
eval () рассчитывает строку в виде выражения JavaScript в текущей области выполнения, что позволяет доступ к локальным переменным. New Function () анализирует код JavaScript, хранящийся в строке, преобразованном в функциональный объект, и затем может быть вызван. Поскольку код работает в отдельной области, локальные переменные не могут быть доступны.
Другими словами, eval () будет мешать объему текущей функции. Полем
JavaScript New Function ()
Конструктор функции создает новый объект функции. В JavaScript каждая функция на самом деле является объектом функции. Функциональные объекты, сгенерированные с использованием конструктора функции, анализируются при создании функции. Это менее эффективно, чем использование объявлений функций и вызов их в вашем коде, поскольку функции, объявленные с использованием операторов функций, проанализированы с другими операторами.
Новая функция () неэффективна в сравнении, что мы можем предсказать в текущих обстоятельствах.
Простой пример заключается в следующем:
Кода -копия выглядит следующим образом:
var add = новая функция (['x', 'y'], 'return x + y');
New Function () анализирует строку в функцию. Полем Тогда мы можем выполнить его, применив
Кода -копия выглядит следующим образом:
Function.apply (null, args)
И это то, что я видел в шаблоне JavaScript:
Кода -копия выглядит следующим образом:
новая функция (
tmpl.arg + ', tmpl',
"var _e = tmpl.encode" + tmpl.helper + ", _s = '" +
str.replace (tmpl.regexp, tmpl.func) +
"'; вернуть _s;"
);
Конечно, у нас есть другие способы.