Quand j'ai regardé le code source du modèle JavaScript, j'ai trouvé une utilisation très intéressante pour générer des fonctions, je me suis dit, n'est-ce pas de la métaprogrammation ?
.
Métaprogrammation JavaScript
La métaprogrammation fait référence à l'écriture de certains types de programmes informatiques qui écrivent ou manipulent d'autres programmes (ou eux-mêmes) en tant que données, ou effectuent un travail au moment de l'exécution qui devrait être terminé au moment de la compilation.
Évaluation JavaScript
La fonction eval() évalue une chaîne et exécute le code JavaScript qu'elle contient.
Il peut être utilisé comme suit :
eval("x=10;y=20;document.write(x*y)")
Bien sûr, cela n'est utilisé que pour exécuter une certaine fonction, mais ce produit est très rentable et sujet aux erreurs.
La fonction d'évaluation doit être évitée autant que possible.
Une meilleure façon est donc d'utiliser New Function()
La grande différence entre l'utilisation de New Function() et eval() est que eval n'est pas qu'une fonction,
eval() évalue une chaîne en tant qu'expression JavaScript dans la portée d'exécution actuelle et peut accéder aux variables locales. New Function() analyse une chaîne qui y est stockée en un objet fonction qui peut ensuite être appelé par du code JavaScript. Étant donné que le code s'exécute dans une portée distincte, les variables locales ne sont pas accessibles.
En d'autres termes, eval() interférera avec la portée de la fonction actuelle. .
Nouvelle fonction JavaScript()
Le constructeur Function crée un nouvel objet Function. En JavaScript, chaque fonction (fonction) est en fait un objet Function. L'objet Function généré à l'aide du constructeur Function est analysé lors de la création de la fonction. C'est moins efficace que si vous déclarez une fonction et l'appelez dans votre code, car les fonctions déclarées à l'aide d'instructions de fonction sont analysées avec d'autres instructions.
New Function() sera moins efficace en comparaison, et c'est ce que nous pouvons prédire dans la situation actuelle.
Un exemple simple ressemble à ceci :
var add = new Function(['x', 'y'], 'return x y');
new Function() analysera la chaîne en une fonction. . Ensuite, nous pouvons l'exécuter via apply
Function.apply(null, args)
Et voici ce que je vois dans le modèle JavaScript :
nouvelle fonction (
tmpl.arg ',tmpl',
"var _e=tmpl.encode" tmpl.helper ",_s='"
str.replace(tmpl.regexp, tmpl.func)
"';return _s;"
);
Bien sûr, nous avons d'autres méthodes.