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

Parlons de l'utilisation de la fonction eval() en JavaScript

青灯夜游
Libérer: 2021-05-25 10:14:41
avant
2714 Les gens l'ont consulté

Cet article vous présentera l'utilisation de la fonction eval() en JavaScript. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Parlons de l'utilisation de la fonction eval() en JavaScript

1. A quoi sert la fonction eval ?

Appelez la fonction eval et ses paramètres peuvent être interprétés comme un programme javascript. En d'autres termes, eval peut exécuter ses arguments sous forme de code

.

Exemple

function f(x) {
    eval('var y=x');
    console.log('y:', y);
}
f('hello');//y:hello
Copier après la connexion

Dans cet exemple, eval exécute son stringparamètrevar y=x sous forme de ligne de code, déclarant une variable locale à l'intérieur de la fonction fy. C'est fondamentalement le même effet d'exécution que

function f(x) {
    var y=x;
    console.log('y:', y);
}
f('hello');//y:hello
Copier après la connexion

.

2. Évitez d'utiliser la fonction eval pour créer des variables locales

Autoriser la fonction eval à interférer avec la portée est une très mauvaise approche. Cette approche peut rendre un morceau de code difficile à comprendre et ne plus être sûr. L'exemple suivant donne aux appelants externes la possibilité de modifier les variables locales et de changer la portée locale.

Exemple

let g = '全局变量'
function f(src) {
    eval(src);
    console.log('g:', g);
}
//以上为源代码
f("var g= '局部变量'");//g:局部变量
f("var y= '局部变量'");//g:全局变量
Copier après la connexion

Lorsque nous passons une variable y qui n'est pas définie dans le code source dans la fonction eval, le résultat de cette exécution de code sera devenir imprévisible.

Un moyen simple de garantir que la fonction eval n'affecte pas la portée externe consiste à utiliser des portées imbriquées. Le 严格模式 de l'ES5 fait cela.

Exemple

let g = '全局变量'
function f(src) {
   (()=> eval(src))();//在嵌套作用域中执行eval
    console.log('g:', g);
}
//以上为源代码
f("var g= '局部变量'");//g:全局变量
f("var y= '局部变量'");//g:全局变量
Copier après la connexion

3.Deux façons d'appeler la fonction eval

3.1 Méthode d'appel direct :

Lorsqu'un appel de fonction implique l'identifiant eval, il peut être appelé un appel direct. A ce moment, le programme exécuté (paramètres d'eval) a un accès complet à la portée locale de l'appelant.

Exemple

const g = '全局变量';
function foo() {
    const g = '局部变量';
    console.log(eval('g'));//直接调用,可以访问到foo的局部作用域,所以输出的是局部变量g
}
foo(); //局部变量
Copier après la connexion

3.2 Méthode d'appel indirect :

Lier eval à un autre nom de variable et transmettre cette variable appelle eval, ce qu'on appelle un appel indirect. A ce moment, le programme exécuté (les paramètres de eval) perd la possibilité d'accéder à la portée locale. En utilisant l'opérateur virgule ,, vous pouvez obtenir une manière concise d'écrire des appels indirects.

Exemples

const g = '全局变量';
function foo2() {
    const g = '局部变量';
    cont test = eval;
    //间接调用,不能访问函数内部的变量g
    console.log(test('g')); //全局变量
    //间接调用简洁方式
    console.log((0, eval)('g'));//全局变量
}
Copier après la connexion

Pour plus de connaissances liées à la programmation, veuillez visiter : Introduction à la programmation ! !

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!

Étiquettes associées:
source:segmentfault.com
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!