Maison > interface Web > js tutoriel > Problèmes avec la fonction eval dans les compétences JavaScript_javascript

Problèmes avec la fonction eval dans les compétences JavaScript_javascript

WBOY
Libérer: 2016-05-16 15:16:48
original
1294 Les gens l'ont consulté

En regardant le code aujourd'hui, j'ai rencontré un problème avec la fonction eval. J'ai lu beaucoup d'articles de blog, mais je ne comprends toujours pas très bien la fonction eval. comprendre comme suit :

/*
var start = []
 , end = []
 , timings = [];
*/
function f(){
 //模拟程序执行时间
 var sum = 0;
 for(var i =0 ;i < 100000; i++){
  sum = sum/(i+1);
 }
}
function repeat(n, action){
 for(var i=0; i<n ;i++){
  eval(action); // eval函数
 }
}
function benchmark(){
 var start = []
  , end = []
  , timings = [];
 repeat(100, "start.push(new Date().getTime());f();end.push(new Date().getTime())");
 for (var i =0; i< start.length; i++){
  timings[i] = end[i] - start[i];
 }
 return timings;
}
benchmark(); //结果为:[]
//如果我把上面的benchmark中的局部变量移到全局就一切正常.
Copier après la connexion

Si je déplace les variables locales du benchmark ci-dessus vers le global, tout fonctionne bien.

Pourquoi la fonction eval produit-elle ici cet effet ? Est-ce équivalent à aliaser la fonction eval ?

Lorsque eval() est appelé directement, il est toujours exécuté dans le contexte de son appel, ce qui signifie qu'il peut accéder aux variables de la fonction de répétition mais ne peut pas accéder aux variables de la fonction de référence, mais il est accessible dans la fonction. Accès aux variables dans la portée globale, donc après avoir défini les variables de démarrage sur des variables globales, vous pouvez renvoyer les résultats souhaités.

function repeat(n, action){
 for(var i=0; i<n ;i++){
  start.push(new Date().getTime());f();end.push(new Date().getTime()); // eval函数
 }
}
Copier après la connexion

Les variables de début et de fin ne sont pas accessibles en répétition

É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