Als ich mir den Quellcode der JavaScript -Vorlage ansah, stellte ich fest, dass es eine interessante Verwendung gibt, um Funktionen zu generieren. Ist das nicht die Metaprogrammierung?
JavaScript -Metaprogrammierung
Die Codekopie lautet wie folgt:
Die Metaprogrammierung bezieht sich auf das Schreiben eines bestimmten Computerprogramms, das andere Programme (oder sich selbst) als Daten schreibt oder manipuliert, oder vervollständigt einige der Arbeiten, die zur Kompilierung der Laufzeit hätte abgeschlossen werden sollen.
JavaScript Eval
Die Codekopie lautet wie folgt:
Die Funktion eval () berechnet einen String und führt den JavaScript -Code darin aus.
Es kann die folgende Verwendung geben:
Die Codekopie lautet wie folgt:
eval ("x = 10; y = 20; document.write (x*y)")
Dies wird natürlich nur verwendet, um eine bestimmte Funktion auszuführen, aber dieses Produkt ist billiger und leicht zu fehlern.
Die Codekopie lautet wie folgt:
Die Eval -Funktion sollte so weit wie möglich vermieden werden.
Ein besserer Weg ist es, neue Funktionen zu verwenden ()
Ein großer Unterschied zwischen der Verwendung neuer Funktionen () und eval () besteht darin, dass Eval nicht nur eine Funktion ist.
Die Codekopie lautet wie folgt:
Eval () berechnet eine Zeichenfolge als JavaScript -Expression innerhalb des aktuellen Ausführungsbereichs, der den Zugriff auf lokale Variablen ermöglicht. New Function () spricht JavaScript -Code an, das in einer String -String gespeichert ist, die in ein Funktionsobjekt konvertiert ist und dann aufgerufen werden kann. Da der Code in einem separaten Bereich ausgeführt wird, können auf lokale Variablen nicht zugegriffen werden.
Mit anderen Worten, Eval () stört den Umfang der aktuellen Funktion. .
JavaScript neue Funktion ()
Der Funktionskonstruktor erstellt ein neues Funktionsobjekt. In JavaScript ist jede Funktion tatsächlich ein Funktionsobjekt. Funktionsobjekte, die mit dem Funktionskonstruktor erzeugt werden, werden analysiert, wenn die Funktion erstellt wird. Dies ist weniger effizient als die Verwendung von Funktionserklärungen und das Aufrufen in Ihrem Code, da Funktionen, die mit Funktionsanweisungen deklariert sind, mit anderen Aussagen analysiert werden.
Neue Funktion () ist im Vergleich ineffizient, was wir unter den gegenwärtigen Umständen vorhersagen können.
Ein einfaches Beispiel ist wie folgt:
Die Codekopie lautet wie folgt:
var add = neue Funktion (['x', 'y'], 'return x + y');
New Function () analysiert die Zeichenfolge in eine Funktion. . Dann können wir es durch Bewerbung ausführen
Die Codekopie lautet wie folgt:
Function.apply (null, args)
Und das habe ich in der JavaScript -Vorlage gesehen:
Die Codekopie lautet wie folgt:
Neue Funktion (
tmpl.arg + ', tmpl',
"var _e = tmpl.encode" + tmpl.helper + ", _s = '" +
Str.Replace (tmpl.regexp, tmpl.func) +
"'; return _s;"
);
Natürlich haben wir andere Möglichkeiten.