Die vorherigen Wörter
Eval und mit werden oft nicht gemocht, als ob ihre Existenz ein Fehler wäre. In CSS werden Tabellen nicht gemocht und verwenden nur Tabellen, um Daten auf Webseiten anzuzeigen, anstatt Layout, als unregelmäßig und überkorrigiert zu werden. Also, in welcher Situation geht es bei Eval und mit? In diesem Artikel wird die Funktion eval () und mit Anweisung im Detail vorgestellt
bewerten
Definition
Eval () ist eine globale Funktion. JavaScript verwendet Eval (), um den aus JavaScript -Quellcode zusammengestellten String zu erklären.
var result = eval ('3+2'); console.log (Ergebnis, Typof Ergebnis); // 5 'Nummer' 'Verwendung
Eval () hat nur einen Parameter. Wenn der übergebene Parameter keine Zeichenfolge ist, gibt er diesen Parameter direkt zurück. Wenn der Parameter eine Zeichenfolge ist, wird die Zeichenfolge als JavaScript -Code kompiliert. Wenn die Kompilierung fehlschlägt, wird eine Ausnahme von Syntaxfehler (SyntaxError) ausgelöst. Wenn die Kompilierung erfolgreich ist, wird der Code ausgeführt und der Wert des letzten Ausdrucks oder der Anweisung in der Zeichenfolge zurückgegeben, und wenn der letzte Ausdruck oder der letzte Ausdruck keinen Wert hat, wird er schließlich undefiniert zurückgeben. Wenn eine Zeichenfolge eine Ausnahme ausgelöst hat, übergibt die Ausnahme den Anruf an eval ()
var num = 1; var str = 'test'; Konsole.log (eval (num)); // 1console.log (eval (str)); // ReferenzError: Der Test ist nicht definiert var strlong1 = 'var x = 1; var y = 2;'; Konsole.log (evalg2), x, x, y); x ++; '; console.log (eval (strlong2), x); // 1 2
Umfang
Eval () verwendet die variable Umgebung, die sie nennt. Das heißt, es sucht nach dem Wert einer Variablen und definiert den Betrieb einer neuen Variablen und Funktion und des Code im lokalen Bereich.
var b = 2; Funktion foo (str, a) {eval (str); console.log (a, b);} foo ('var b = 3;', 1); // 1 3Alias
Wenn Eval () durch einen Alias aufgerufen wird, wird seine Zeichenfolge als globaler Code der obersten Ebene ausgeführt. Der ausgeführte Code kann neue globale Variablen und globale Funktionen definieren oder globale Variablen Werte zuweisen, aber keine lokalen Variablen in der Funktion verwenden oder ändern können.
var geval = eval; var x = 'global', y = 'global'; Funktion f () {var x = 'local'; eval ('x += "geändert";'); return x;} Funktion g () {var y = 'local'; Geval ('y += "verändert";'); return y;} console.log (f (), x); // LocalChanged GlobalConsol.log (g (), y), y), y);[Anmerkung] IE8-Der Browser ruft Eval () über einen Alias auf und ruft eval () normalerweise das gleiche Ergebnis.
Nebenwirkung
Der JavaScript -Interpreter führt eine Menge Codeanalyse und -optimierung durch. Das Problem mit eval () ist, dass der Code, der für die dynamische Ausführung verwendet wird
Ähnlich wie bei Eval () sind setTimeout (), setInterval (), new Function () usw. Diese Funktionen können dynamisch ausgeführt werden, wenn das Programm unter Verwendung von Zeichenfolgen als Parameter ausgeführt wird. Die Vorteile dieses Ausführungsmechanismus können seine Leistungsverluste nicht ausgleichen. Daher sollten Sie versuchen, sie zu vermeiden.
Strenger Modus
Da die Funktion eval () zu leistungsfähig ist, schränkt der strenge Modus sie streng ein
【1】 Variablen oder Funktionen können nicht über die Funktion eval () erstellt werden, ihre Werte können jedoch abgefragt und geändert werden
'strict'; eval ('var x = 1;'); Konsole.log (x); // ReferenzError: x ist nicht definiert 'Use strikt'; var x = 1; eval ('x = 2;'); Konsole.log (x); // 2【2】 Eval als Kennung kann nicht verwendet werden
'Strict'; var eval = 10; // syntaxError: unerwartete Bewertung oder Argumente im strengen Modus
mit
Der Zweck der Definition mit Aussagen besteht darin, die Arbeit des Schreibens desselben Objekts mehrmals zu vereinfachen.
Die With -Anweisung fügt Objekt zum Kopf der Bereichskette hinzu, führt dann die Anweisung aus und stellt schließlich die Umfangskette in ihren ursprünglichen Zustand wieder her.
mit (Objekt) {Anweisung;}Wirkung
Wenn das Objektniststufe tiefgreifend ist, werden mit Anweisungen normalerweise zur Vereinfachung des Code schreiben. Im Wesentlichen wird es verarbeitet, indem die Referenz eines Objekts als Umfang behandelt und die Attribute des Objekts als Bezeichner im Bereich verwendet werden, wodurch ein neuer lexikalischer Bereich erstellt wird
In Client JavaScript kann ein Ausdruck wie folgt verwendet werden, um auf Elemente in HTML -Form zuzugreifen
document.forms [0] .Address.Value
Wenn ein solcher Ausdruck im Code mehrmals erscheint, können Sie die mit Anweisung mit der Anweisung zum Formular zur oberen Ebene der Bereichskette hinzufügen
mit (document.Forms [0]) {name.Value = ''; address.Value = ''; emai.value = '';}Diese Methode reduziert eine Menge Eingaben, ohne dass das Dokument für jeden Eigenschaftsnamen ein Präfix -Dokument enthält. Dieses Objekt wird vorübergehend auf der Bereichskette montiert. Wenn JavaScript Identifikatoren wie die Adresse analysieren muss, wird in diesem Objekt automatisch gesucht.
[Anmerkung] Die Anweisung mit der Anweisung enthält eine Abkürzung, um die Eigenschaften eines Objekts zu lesen, aber sie können keine Eigenschaften eines Objekts erstellen
Wenn das Objekt O ein Attribut X hat, weist der folgende Code den Attributwert 1 zu 1 zu 1
var o = {x: 0}; mit (o) x = 1; console.log (ox); // 1Wenn in O kein Attribut X definiert ist, ist der folgende Code genau dem Code X = 1, der die mit Anweisung nicht verwendet. Dies liegt daran, dass die LHS
var o = {}; mit (o) x = 1; console.log (ox); // undefinedconsole.log (x); // 1Nebenwirkung
Ähnlich wie bei EVAL ist der JavaScript -Code der mit der With -Anweisung sehr schwer zu optimieren und verursacht auch Schwierigkeiten bei der Debugie des Codes. Es ist langsamer als Code, der die mit Anweisung nicht verwendet.
Wenn die mit Aussage unangemessene Aussage unangemessen ist, kann sie außerdem variable Leckagen verursachen und den globalen Umfang verschmutzen.
var x = 1; var o = {}; mit (o) {x = 2;} console.log (x); // 2console.log (ox); // undefiniertStrenger Modus
Im strengen Modus ist die Verwendung mit Aussagen verboten
// syntaxError: striktemodus codes kann keine mit Anweisung 'Use strikt enthalten'; var o = {}; mit (o) {x = 2;}endlich
Die Verwendung von Eval und With macht es der Engine unmöglich, die Umfangs -Lookups zur Kompilierung zu optimieren, was zu einer Leistungsverschlechterung und einem langsameren Code führt. Da eval und mit in der tatsächlichen Arbeit selten verwendet werden, wirken sich die Einschränkungen im strengen Modus nur wenig auf uns aus. Genau wie das Außenministerium eines Tages eine Ankündigung herausgegeben hat, dass unser Land kein Visum mehr nach Jamaika ausgibt. Obwohl wir von Jamaika gehört haben, gehen die meisten Menschen möglicherweise nicht einmal in ihrem Leben dorthin, also spielt es keine Rolle. Ebenso spielt es keine Rolle, ob Eval und mit nicht gemocht werden oder nicht
Das obige ist eine detaillierte Erläuterung der Zusammenfassung der JavaScript -Lernzusammenfassung, über die der Editor vorgestellt wurde. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!