En regardant le code source du modèle JavaScript, j'ai trouvé qu'il y avait une utilisation intéressante pour générer des fonctions. N'est-ce pas cette métaprogrammation?
Métaprogrammation JavaScript
La copie de code est la suivante:
La métaprogrammation fait référence à la rédaction d'un certain type de programme informatique qui écrit ou manipule d'autres programmes (ou lui-même) comme leurs données, ou termine certains des travaux qui auraient dû être achevés au moment de la compilation au moment de l'exécution.
Javascript eval
La copie de code est la suivante:
La fonction EVAL () calcule une chaîne et exécute le code JavaScript.
Il peut y avoir l'utilisation suivante:
La copie de code est la suivante:
eval ("x = 10; y = 20; document.write (x * y)")
Bien sûr, cela est juste utilisé pour exécuter une certaine fonction, mais ce produit est moins cher et facile à faire des erreurs.
La copie de code est la suivante:
La fonction d'évaluation doit être évitée autant que possible.
Donc, une meilleure façon consiste à utiliser une nouvelle fonction ()
Une grande différence entre l'utilisation de nouvelles fonctions () et d'évalue () est que l'évaluation n'est pas seulement une fonction.
La copie de code est la suivante:
EVAL () calcule une chaîne en tant qu'expression JavaScript dans la portée actuelle de l'exécution, permettant l'accès aux variables locales. Nouvelle fonction () parses JavaScript Code stocké dans une chaîne convertie en un objet de fonction et peut ensuite être appelée. É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. .
JavaScript nouvelle fonction ()
Le constructeur de fonction crée un nouvel objet de fonction. Dans JavaScript, chaque fonction est en fait un objet de fonction. Les objets de fonction générés à l'aide du constructeur de fonction sont analysés lorsque la fonction est créée. Ceci est moins efficace que l'utilisation de déclarations de fonction et les appeler dans votre code, car les fonctions déclarées à l'aide des instructions de fonction sont analysées avec d'autres instructions.
Une nouvelle fonction () est inefficace en comparaison, ce que nous pouvons prédire dans les circonstances actuelles.
Un exemple simple est le suivant:
La copie de code est la suivante:
var add = new function (['x', 'y'], 'return x + y');
Une nouvelle fonction () analyse la chaîne en une fonction. . Ensuite, nous pouvons l'exécuter en appliquant
La copie de code est la suivante:
Function.apply (null, args)
Et c'est ce que j'ai vu dans le modèle javascript:
La copie de code est la suivante:
nouvelle fonction (
tmpl.arg + ', tmpl',
"var _e = tmpl.encode" + tmpl.helper + ", _s = '" +
str.replace (tmpl.regexp, tmpl.func) +
"'; retour _s;"
));
Bien sûr, nous avons d'autres façons.