Home >Web Front-end >JS Tutorial >Let's talk about the usage of eval() function in JavaScript

Let's talk about the usage of eval() function in JavaScript

青灯夜游
青灯夜游forward
2021-05-25 10:14:412760browse

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.

Let's talk about the usage of eval() function in JavaScript

#1. What is the use of the eval function?

Call the eval function and its parameters can be interpreted as a javascript program. In other words, eval can execute its parameters as code

.

Example

function f(x) {
    eval('var y=x');
    console.log('y:', y);
}
f('hello');//y:hello

In this example, eval executes its stringparameter var y=xas 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

.

2. Avoid using the eval function to create local variables

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

3. Two calling methods of eval function

3.1 Direct calling method:

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

3.2 Indirect calling method:

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!

Statement:
This article is reproduced at:segmentfault.com. If there is any infringement, please contact admin@php.cn delete