Maison > interface Web > js tutoriel > le corps du texte

Quand utiliser `eval()` et `new Function()` en JavaScript : quelles sont les principales différences ?

DDD
Libérer: 2024-11-02 03:16:30
original
408 Les gens l'ont consulté

When to Use `eval()` vs. `new Function()` in JavaScript: What Are the Key Differences?

Explorer les différences entre eval() et new Function()

En JavaScript, eval() et new Function() permettent toutes deux exécution de code dynamique. Cependant, ils diffèrent considérablement dans leurs mécanismes sous-jacents et leur portée.

eval()

eval() évalue une chaîne en tant qu'expression JavaScript dans la portée d'exécution actuelle. Cela signifie qu'il a accès aux variables locales dans la portée où il est appelé.

new Function()

new Function() analyse une chaîne de code JavaScript en une fonction objet. Cette fonction est ensuite appelée et son code est exécuté dans une portée distincte. Il n'a pas accès aux variables locales en dehors de cette portée.

Différences pratiques

Considérons l'exemple 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'));
Copier après la connexion

Les deux évaluent( ) et func() renverront le résultat de l'expression arithmétique '2 1'. Cependant, si le code suivant devait être exécuté dans une fonction :

var a = 11;
evaluate('a = 22');
Copier après la connexion

La valeur de a serait modifiée en 22 car eval() utilise la portée d'exécution actuelle. En revanche, si func() était utilisé à la place, la valeur de a resterait inchangée car elle fonctionne dans une portée distincte.

Considérations d'utilisation

Pendant eval() et new Function() peuvent être utiles dans certains scénarios, ils doivent être utilisés avec prudence en raison des risques de sécurité et du potentiel de conséquences inattendues. L'évaluation de données non fiables peut exposer des vulnérabilités, et les deux fonctions peuvent créer des objets globaux susceptibles de polluer la portée globale.

En général, il est recommandé d'éviter d'utiliser eval() et new Function() sauf en cas d'absolue nécessité. Envisagez plutôt des alternatives plus sûres telles que des fonctions personnalisées ou l'utilisation de la syntaxe alternative eval() (eval("1 1")).

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!