Dieser Artikel stellt Ihnen die Verwendung der Funktion eval() in JavaScript vor. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
Der Aufruf der Auswertungsfunktion und ihrer Parameter kann als Javascript-Programm interpretiert werden. Mit anderen Worten: eval kann seine Parameter als Code ausführen
.
function f(x) { eval('var y=x'); console.log('y:', y); } f('hello');//y:hello
In diesem Beispiel führt eval
seinen string
-Parameter var y=x
als Codezeile in der Funktion < aus code>f deklariert intern eine lokale Variable y
. Dies ist im Grunde der gleiche Ausführungseffekt wie eval
将它的string
参数var y=x
作为一行代码执行了,在函数f
内部声明了一个局部变量y
。这和
function f(x) { var y=x; console.log('y:', y); } f('hello');//y:hello
的执行效果基本相同。
允许eval函数干扰作用域,是一个相当错误的做法。这种做法会使一段代码变得难以理解,并且不再安全。下面这个例子便赋予了外部调用者修改局部变量,改变局部作用域的能力。
例子
let g = '全局变量' function f(src) { eval(src); console.log('g:', g); } //以上为源代码 f("var g= '局部变量'");//g:局部变量 f("var y= '局部变量'");//g:全局变量
当我们把一个没有在源代码中定义的变量y
,传入eval
函数时,这段代码执行的结果将变得难以预测。
保证eval
函数不影响外部作用域的一个简单方法是使用嵌套的作用域。ES5的严格模式
便是这样做的。
例子
let g = '全局变量' function f(src) { (()=> eval(src))();//在嵌套作用域中执行eval console.log('g:', g); } //以上为源代码 f("var g= '局部变量'");//g:全局变量 f("var y= '局部变量'");//g:全局变量
当函数调用涉及eval
标识符时,可以称为直接调用。此时,被执行的程序(eval的参数)具有完全访问调用者局部作用域的权限。
例子
const g = '全局变量'; function foo() { const g = '局部变量'; console.log(eval('g'));//直接调用,可以访问到foo的局部作用域,所以输出的是局部变量g } foo(); //局部变量
绑定eval
到另一个变量名,在通过该变量调用eval
,称之为间接调用。此时,被执行的程序(eval的参数)失去对局部作用域的访问能力。利用逗号操作符,
const g = '全局变量'; function foo2() { const g = '局部变量'; cont test = eval; //间接调用,不能访问函数内部的变量g console.log(test('g')); //全局变量 //间接调用简洁方式 console.log((0, eval)('g'));//全局变量 }
2. Vermeiden Sie die Verwendung der Eval-Funktion zum Erstellen lokaler Variablen.
🎜Beispiel🎜🎜rrreee🎜Wenn wir eine Variabley
, die nicht im Quellcode definiert ist, an die Funktion eval
übergeben, wird das Ergebnis der Ausführung dieses Codes angezeigt werden sehr unvorhersehbar. 🎜🎜Eine einfache Möglichkeit, sicherzustellen, dass die Funktion eval
keine Auswirkungen auf den äußeren Bereich hat, ist die Verwendung verschachtelter Bereiche. Der strikte Modus
von ES5 erledigt dies. 🎜🎜🎜Beispiel🎜🎜rrreee🎜🎜3. Zwei Möglichkeiten, die Eval-Funktion aufzurufen🎜🎜🎜🎜3.1 Direktaufrufmethode: 🎜🎜🎜Wenn der Funktionsaufruf die Kennung eval
beinhaltet, kann er aufgerufen werden direkter Anruf. Zu diesem Zeitpunkt hat das ausgeführte Programm (die Parameter von eval) vollen Zugriff auf den lokalen Bereich des Aufrufers. 🎜🎜🎜Beispiel🎜🎜rrreee🎜🎜3.2 Indirekte Aufrufmethode: 🎜🎜🎜Binden Sie eval
an einen anderen Variablennamen, rufen Sie dann eval
über die Variable auf und nennen Sie es einen indirekten Aufruf. Zu diesem Zeitpunkt verliert das ausgeführte Programm (die Parameter von eval) die Möglichkeit, auf den lokalen Bereich zuzugreifen. Mit den Kommaoperatoren ,
erreichen Sie eine prägnante Schreibweise indirekter Aufrufe. 🎜🎜🎜Beispiele🎜🎜rrreee🎜Weitere Kenntnisse zum Thema Programmierung finden Sie unter: 🎜Einführung in die Programmierung🎜! ! 🎜Das obige ist der detaillierte Inhalt vonLassen Sie uns über die Verwendung der Funktion eval() in JavaScript sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!