Maison  >  Article  >  interface Web  >  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

伊谢尔伦
伊谢尔伦original
2017-07-25 14:00:182558parcourir

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'

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

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
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


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



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!

Déclaration:
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