Les mots précédents
Eva et avec sont souvent détestés, comme si leur existence était une erreur. Dans CSS, les tables sont détestées et n'utilisent que des tables pour afficher des données sur les pages Web, plutôt que la mise en page, peuvent être refusées comme irrégulières et surcorreuses. Alors, quelle est la situation à propos de l'évalue et avec? Cet article introduira la fonction eval () et avec une déclaration en détail
évaluer
définition
eval () est une fonction globale. JavaScript utilise EVAL () pour expliquer la chaîne en cours d'exécution composée de code source JavaScript.
var result = eval ('3 + 2'); console.log (résultat, type de résultat); // 5 'nombre'usage
eval () n'a qu'un seul paramètre. Si le paramètre passé n'est pas une chaîne, il renvoie directement ce paramètre. Si le paramètre est une chaîne, il compilera la chaîne sous forme de code JavaScript. Si la compilation échoue, une exception d'erreur de syntaxe (syntaxerror) est lancée. Si la compilation est réussie, le code est exécuté et la valeur de la dernière expression ou instruction dans la chaîne est renvoyée, et si la dernière expression ou instruction n'a aucune valeur, elle reviendra finalement indéfinie. Si une chaîne lance une exception, l'exception passera l'appel à EVAL ()
var num = 1; var str = 'test'; console.log (eval (num)); // 1console.log (evaled (str)); // ReferenceError: le test n'est pas défini var strlong1 = 'var x = 1; var y = 2;'; console.log (evar (strlong1), x, y); // non défini 1 2var String2 = 'var x = 1; x ++; '; console.log (EVAL (strlong2), x); // 1 2
Portée
EVAL () utilise l'environnement de portée variable qui l'appelle. Autrement dit, il recherche la valeur d'une variable et définit le fonctionnement d'une nouvelle variable et d'une nouvelle fonction et du code dans la portée locale.
var b = 2; fonction foo (str, a) {eval (str); console.log (a, b);} foo ('var b = 3;', 1); // 1 3Alias
Lorsqu'il est appelé via un alias, EVAL () exécutera sa chaîne en tant que code global de niveau supérieur. Le code exécuté peut définir de nouvelles variables globales et fonctions globales, ou attribuer des valeurs aux variables globales, mais ne peut pas utiliser ou modifier les variables locales dans la fonction.
var geval = eval; var x = 'global', y = 'global'; Fonction f () {var x = 'local'; eval ('x + = "changé";'); return x;} function g () {var y = 'local'; geval ('y + = "changé";'); return y;} console.log (f (), x); // localchanged globalConsole.log (g (), y); // localChangée[Remarque] IE8-Le navigateur appelle EVAL () via un alias et appelle eval () normalement le même résultat.
effet secondaire
L'interprète JavaScript effectue une grande partie de l'analyse et de l'optimisation du code. Le problème avec eval () est que le code utilisé pour l'exécution dynamique n'est généralement pas analysé, donc l'interprète ne peut pas l'optimiser, ce qui conduira à une dégradation des performances
Semblable à EVAL () sont setTimeout (), setInterval (), New Function (), etc. Ces fonctions peuvent être exécutées dynamiquement lorsque le programme est exécuté à l'aide de chaînes comme paramètres. Les avantages de ce mécanisme d'exécution ne peuvent pas compenser ses pertes de performances, vous devez donc essayer d'éviter de l'utiliser.
Mode strict
Parce que la fonction eval () est trop puissante, le mode strict le restreint strictement
【1】 Les variables ou fonctions ne peuvent pas être créées via la fonction EVAL (), mais leurs valeurs peuvent être interrogées et modifiées
'utiliser strict'; eval ('var x = 1;'); console.log (x); // référence: x n'est pas défini strict '; var x = 1; ev (' x = 2; '); console.log (x); // 2【2】 Impossible d'utiliser EVAL comme identifiant
«Utiliser Strict»; var evale
avec
Le but de définir avec des instructions est de simplifier plusieurs fois le travail d'écriture du même objet.
L'instruction With Ajoute un objet à la tête de la chaîne de portée, puis exécute l'instruction et restaure enfin la chaîne de portée à son état d'origine.
avec (objet) {instruction;}effet
Lorsque le niveau de nidification de l'objet est profond, les instructions sont généralement utilisées pour simplifier l'écriture de code. Essentiellement, il est traité en traitant la référence d'un objet comme une portée et en utilisant les attributs de l'objet comme identificateurs dans la portée, créant ainsi une nouvelle portée lexicale
Dans Client JavaScript, une expression comme celle suivante peut être utilisée pour accéder aux éléments dans un formulaire HTML
document.forms [0] .address.value
Si une telle expression apparaît plusieurs fois dans le code, vous pouvez utiliser l'instruction avec pour ajouter l'objet formulaire au niveau supérieur de la chaîne de portée
avec (document.forms [0]) {name.value = ''; adresse.value = ''; emai.value = '';}Cette méthode réduit beaucoup d'entrée sans avoir à préfixer Document.Forms [0] pour chaque nom de propriété. Cet objet est temporairement monté sur la chaîne de portée. Lorsque JavaScript doit analyser les identificateurs tels que l'adresse, il recherchera automatiquement dans cet objet.
[Remarque] L'instruction avec avec un raccourci pour lire les propriétés d'un objet, mais il ne peut pas créer des propriétés d'un objet
Si l'objet O a un attribut x, alors le code suivant attribue la valeur d'attribut à 1
var o = {x: 0}; avec (o) x = 1; console.log (ox); // 1Si aucun attribut x n'est défini dans O, le code suivant est exactement le même que le code x = 1 qui n'utilise pas l'instruction avec. En effet
var o = {}; avec (o) x = 1; console.log (ox); // undefinedConsole.log (x); // 1effet secondaire
Semblable à l'évaluation, le code JavaScript de l'instruction With avec est très difficile à optimiser, et il cause également des difficultés à déboguer le code. Il est plus lent que le code qui n'utilise pas l'instruction avec.
De plus, si l'énoncé avec la déclaration est inapproprié, il peut provoquer une fuite variable et polluer la portée globale.
var x = 1; var o = {}; avec (o) {x = 2;} console.log (x); // 2Console.log (ox); // indéfiniMode strict
En mode strict, l'utilisation des déclarations est interdite
// Syntaxerror: le code de mode strict peut ne pas inclure un avec une déclaration strict '; var o = {}; avec (o) {x = 2;}enfin
L'utilisation d'EVAL et avec rend impossible le moteur d'optimiser les recherches de portée au moment de la compilation, ce qui entraîne une dégradation des performances et une course de code plus lente. Parce que l'évalue et avec sont rarement utilisés dans les travaux réels, les restrictions en mode strict ont peu d'impact sur nous. Tout comme le ministère des Affaires étrangères a publié un jour une annonce que notre pays ne délivrera plus de visas à la Jamaïque. Bien que nous ayons entendu parler de la Jamaïque, la plupart des gens peuvent ne pas y aller une fois dans leur vie, donc cela n'a pas d'importance. De même, peu importe si EvA et avec sont détestés ou non
Ce qui précède est une explication détaillée du résumé d'apprentissage JavaScript que l'éditeur vous a présenté est la fonction EVAL méprisée et avec des exemples de déclaration. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!