Maison > interface Web > js tutoriel > Série JavaScript Advanced : pourquoi ne pas utiliser eval

Série JavaScript Advanced : pourquoi ne pas utiliser eval

黄舟
Libérer: 2017-02-08 09:40:36
original
1355 Les gens l'ont consulté
  • Évaluation déguisée

  • Problèmes de sécurité

  • Conclusion

eval exécute une chaîne de code JavaScript dans la portée actuelle.

var foo = 1;
function test() {
    var foo = 2;
    eval('foo = 3');
    return foo;
}
test(); // 3
foo; // 1
Copier après la connexion
Mais eval n'est exécuté dans la portée actuelle que s'il est appelé directement et que la fonction appelante est eval elle-même.

var foo = 1;
function test() {
    var foo = 2;
    var bar = eval;
    bar('foo = 3');
    return foo;
}
test(); // 2
foo; // 3
Copier après la connexion
Note du traducteur : le code ci-dessus équivaut à appeler eval dans la portée globale, et a le même effet que les deux façons d'écrire suivantes :

// 写法一:直接调用全局作用域下的 foo 变量
var foo = 1;
function test() {
    var foo = 2;
    window.foo = 3;
    return foo;
}
test(); // 2
foo; // 3

// 写法二:使用 call 函数修改 eval 执行的上下文为全局作用域
var foo = 1;
function test() {
    var foo = 2;
    eval.call(window, 'foo = 3');
    return foo;
}
test(); // 2
foo; // 3
Copier après la connexion
Dans tous les cas nous L'utilisation de la fonction eval doit être évitée. 99,9 % des scénarios qui utilisent eval ont des solutions qui n'utilisent pas eval.

Évaluation déguisée

Les fonctions planifiées setTimeout et setInterval peuvent accepter des chaînes comme premier paramètre. Cette chaîne est toujours exécutée dans la portée globale, donc eval n'est pas appelé directement dans ce cas.

Problèmes de sécurité

eval présente également des problèmes de sécurité car il exécutera tout code qui lui est transmis. N'utilisez jamais eval lorsque la chaîne de code est inconnue ou provient d'une fonction non fiable.

Conclusion

N'utilisez jamais eval, tout code qui l'utilise sera discutable en termes de fonctionnement, de performances et de sécurité. Si une situation nécessite l'utilisation d'eval pour fonctionner correctement, sa conception sera tout d'abord remise en question, cela ne devrait pas être la solution privilégiée, et une meilleure solution qui n'utilise pas eval devrait être pleinement envisagée et priorisée.

Ce qui précède est la série JavaScript avancée - pourquoi ne pas utiliser eval Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


É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