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.
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
.
function f(x) { eval('var y=x'); console.log('y:', y); } f('hello');//y:hello
Dans cet exemple, eval
exécute son string
paramètrevar y=x
sous forme de ligne de code, déclarant une variable locale à l'intérieur de la fonction f
y
. 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
.
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:全局变量
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(); //局部变量
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!