DistingUishing eval () et new function () Dans javaScript
Dans JavaScript, les développeurs rencontrent souvent deux fonctions qui semblent effectuer une tâche similaire: EVAL () et nouvelle fonction (). Alors que les deux fonctions évaluent les chaînes comme code, leurs mécanismes et implications sous-jacents sont significativement différents.
eval () vs new function ()
La fonction EVAL () évalue une chaîne comme une expression javascript au sein de la lunette d'exécution actuelle. Cela signifie qu'il a accès aux variables locales définies dans la portée actuelle. En revanche, une nouvelle fonction () analyse le code JavaScript stocké dans une chaîne dans un objet de fonction, qui peut ensuite être appelé. Cet objet de fonction est créé dans une portée distincte, et ne peut donc pas accéder aux variables locales de l'environnement d'appel.
Exemple
Pour illustrer cette distinction, considérer le code suivant:
var evaluate = function(string) { return eval('(' string ')'); } var func = function(string) { return (new Function( 'return (' string ')' )()); } console.log(evaluate('2 1')); console.log(func('2 1'));
Les deux fonctions publieront le résultat attendu de 3. Cependant, si nous modifions le code pour utiliser les variables locales, la différence devient évidente:
function test1() { var a = 11; eval('(a = 22)'); // Modifies the local variable within the `test1` function alert(a); // Alerts 22 }
Dans ce cas, l'utilisation d'EVAL () modifierait la variable locale A car l'évaluation se produit dans la portée de la fonction TEST1. Cependant, si nous utilisons à la place une nouvelle fonction ('return (a = 22);') (), la variable locale A resterait non affectée parce que le code s'exécute dans une portée distincte.
La sécurité et les considérations
sont importantes de noter que EVAL () et la nouvelle fonction () peuvent comparer les riches de sécurité lorsqu'ils sont utilisés avec des données UNTRUT. Les entrées malveillantes peuvent potentiellement exposer des informations sensibles ou exécuter du code arbitraire. Par conséquent, il est fortement recommandé d'éviter d'utiliser ces fonctions à moins que ce soit absolument nécessaire. EVAL () évalue les chaînes dans la portée actuelle de l'exécution, tandis que la nouvelle fonction () crée une nouvelle portée pour l'évaluation. Comprendre cette distinction est crucial pour la programmation JavaScript efficace et le maintien de la sécurité.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3