Maison > interface Web > js tutoriel > Explication détaillée de la définition, de l'utilisation et des effets secondaires de l'évaluation globale des fonctions JavaScript avec des exemples

Explication détaillée de la définition, de l'utilisation et des effets secondaires de l'évaluation globale des fonctions JavaScript avec des exemples

伊谢尔伦
Libérer: 2017-07-25 14:00:18
original
2656 Les gens l'ont consulté

eval() est une fonction globale. JavaScript utilise eval() pour interpréter et exécuter une chaîne composée de code source javascript


var result = eval('3+2');
console.log(result,typeof result);//5 'number'
Copier après la connexion

Usage

eval() n'a qu'un seul paramètre. Si le paramètre transmis 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 syntaxError est levée. Si la compilation réussit, l'exécution de ce code commence et la valeur de la dernière expression ou instruction de la chaîne est renvoyée. Si la dernière expression ou instruction n'a aucune valeur, undefined est finalement renvoyé. Si la chaîne lève une exception, cette exception transmettra l'appel à eval()


var num = 1;
var str = 'test';
console.log(eval(num));//1
console.log(eval(str));//ReferenceError: test is not defined 
var strLong1 = 'var x = 1;var y = 2;';
console.log(eval(strLong1),x,y);//undefined 1 2
var strLong2 = 'var x = 1; x++;';
console.log(eval(strLong2),x);//1 2
Copier après la connexion

scope >
eval () utilise l'environnement de portée variable dans lequel il est appelé. Autrement dit, il recherche la valeur d'une variable et définit de nouvelles variables et fonctions exactement de la même manière que le code dans la portée locale



var b = 2;
function foo(str,a){
eval(str);
console.log(a,b);
}
foo('var b = 3;',1);//1 3
Copier après la connexion
Alias ​​​​


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 il ne peut pas utiliser ou modifier les variables locales dans la fonction



[Note] IE8-Les résultats de l'appel de eval() via des alias et de l'appel de eval() sont normalement les mêmes
var geval = eval; 
var x = 'global',y = 'global'; 
function f(){
var x = 'local';
eval('x += "changed";');
return x;
}
function g(){
var y = 'local';
geval('y += "changed";');
return y;
}
console.log(f(),x);//localchanged global
console.log(g(),y);//local globalchanged
Copier après la connexion


Effets secondaires

JavaScript interprète Beaucoup d'analyse et d'optimisation de code. Le problème avec eval() est que le code utilisé pour l'exécution dynamique ne peut généralement pas être analysé, donc l'interpréteur ne peut pas l'optimiser, ce qui entraînera une dégradation des performances


Semblable à eval() est setTimeout () , setInterval(), new Function(), etc. Ces fonctions peuvent prendre des chaînes comme paramètres et être exécutées dynamiquement lorsque le programme est en cours d'exécution. Les avantages de ce mécanisme d'exécution ne peuvent pas compenser la perte de performances, vous devez donc essayer d'éviter d'utiliser le


mode strict


en raison de eval( ) la fonction est trop puissante et le mode strict lui impose des restrictions strictes


[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



【2】Il est interdit d'utiliser eval comme identifiant
'use strict';
eval('var x = 1;');
console.log(x);//ReferenceError: x is not defined
'use strict';
var x = 1;
eval('x = 2;');
console.log(x);//2
Copier après la connexion



Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal