Gibt es bei einer Zeichenfolge , die eine gültige JSON-Zeichenfolge darstellt , einen Unterschied zwischen diesen beiden Analysemethoden:
%Vor% Ich habe festgestellt, dass jQuery die zweite Methode verwendet, um JSON-Zeichenfolgen zu parsen (in Umgebungen, in denen ein integrierter JSON-Parser fehlt). Ich frage mich, warum sie nicht die erste Methode verwenden. Warum erstellen Sie ein Funktionsobjekt und rufen es auf, wenn Sie einfach eval()
verwenden?
eval
wird innerhalb des Gültigkeitsbereichs ausgeführt, in dem es deklariert wurde. Function
erzeugt ein neues Funktionsobjekt mit einem eigenen Gültigkeitsbereich und gibt einen Verweis auf diese Funktion zurück, die aufgerufen werden kann.
Nehmen Sie dieses Beispiel:
%Vor% Die ersten beiden Funktionsaufrufe werden 123
(der globale Wert von x
) und undefined
, der globale Wert von y
, ausgeben.
Die beiden Funktionen eval
drucken 123
und 1
(der lokale Wert von y
). Dies liegt daran, dass eval
lokalen Zugriff auf die Schließung hat, in der es ausgeführt wird. Diese Verhaltensweisen (sowie die Tatsache, dass eval
völlig unzuverlässig ist und inkonsistent
Hinweis: Code oben in Firefox 8 getestet, Ihre Laufleistung kann variieren:)
Die Verwendung von eval
ist böse, weil es viele Sicherheitslücken geben kann. Sie führen Code im globalen Gültigkeitsbereich aus. Function
nimmt dies anders, indem es in seinem eigenen Umfang ausführt. Aber eine Sache Function
ist besser Leistung. Schauen Sie sich dieses Blog an zeigt, dass Function
in FF2 fast 2x schneller ist.
Bearbeiten: Ich bin nicht sicher, wie viel sicherer es ist, wenn Sie document.location = "bad-url"
ausführen, es würde immer noch mit Function
Tags und Links javascript json eval