Maison  >  Article  >  interface Web  >  Parlons de l'utilisation de la fonction eval() en JavaScript

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

青灯夜游
青灯夜游avant
2021-05-25 10:14:412732parcourir

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

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

.

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:全局变量

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:全局变量

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(); //局部变量

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'));//全局变量
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer