This article will introduce you to the usage of the eval() function in JavaScript. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to everyone.
Call the eval function and its parameters can be interpreted as a javascript program. In other words, eval can execute its parameters as code
.
function f(x) { eval('var y=x'); console.log('y:', y); } f('hello');//y:hello
In this example, eval
executes its string
parameter var y=x
as a single line of code Yes, a local variable y
is declared inside function f
. This is basically the same execution effect as
function f(x) { var y=x; console.log('y:', y); } f('hello');//y:hello
.
Allowing the eval function to interfere with the scope is a very wrong approach. This approach can make a piece of code difficult to understand and no longer safe. The following example gives external callers the ability to modify local variables and change the local scope.
Example
let g = '全局变量' function f(src) { eval(src); console.log('g:', g); } //以上为源代码 f("var g= '局部变量'");//g:局部变量 f("var y= '局部变量'");//g:全局变量
When we pass a variable y
that is not defined in the source code into the eval
function , the results of this code execution will become unpredictable.
A simple way to ensure that the eval
function does not affect the outer scope is to use nested scopes. ES5's strict mode
does this.
Example
let g = '全局变量' function f(src) { (()=> eval(src))();//在嵌套作用域中执行eval console.log('g:', g); } //以上为源代码 f("var g= '局部变量'");//g:全局变量 f("var y= '局部变量'");//g:全局变量
When a function call involves the eval
identifier, it can be called a direct call. At this time, the executed program (eval's parameters) has full access to the caller's local scope.
Example
const g = '全局变量'; function foo() { const g = '局部变量'; console.log(eval('g'));//直接调用,可以访问到foo的局部作用域,所以输出的是局部变量g } foo(); //局部变量
Bind eval
to another variable name, calling eval
through this variable is called an indirect call. At this time, the executed program (the parameters of eval) loses the ability to access the local scope. Using the comma operators ,
, you can achieve a concise way of writing indirect calls.
Example
const g = '全局变量'; function foo2() { const g = '局部变量'; cont test = eval; //间接调用,不能访问函数内部的变量g console.log(test('g')); //全局变量 //间接调用简洁方式 console.log((0, eval)('g'));//全局变量 }
For more programming-related knowledge, please visit: Introduction to Programming! !
The above is the detailed content of Let's talk about the usage of eval() function in JavaScript. For more information, please follow other related articles on the PHP Chinese website!