eval解析

eval解析

内容来源 MDN,我只是搬运工

eval()函数会将传入的字符串当做JavaScript代码进行执行

语法

eval(string)

描述

eval()是全局对象的一个函数属性

eval()的参数是一个字符串。如果字符串表示的是表达式,eval()会对表达式进行求值。如果参数表示一个或多个Javascript语句,那么eval()就会执行这些语句。注意不要用eval()来执行一个四则运算表达式;因为Javascript会自动为四则运算符求值并不需要eval来包裹

如果eval()的参数不是字符串,eval()将会将参数原封不动的返回。在下面例子中,字符串构造器被指定,eval()返回字符串对象而不是对字符串求值。

1
2
eval(new String("2+2"))//=>返回“2+2”的字符串对象
eval("2+2")//=>return 4

你可以使用通用的方法来绕过这个限制,如使用toString()

1
2
var expression = new String("2+2");
eval(expression.toString())

重点

如果你间接的使用eval(),如通过一个引用来调用它而不是直接调用eval。从ES5起它工作在全局作用域而不是局部作用域;这意味着,例如,下面代码:

1
2
3
4
5
6
function test() {
var x = 2, y = 4;
console.log(eval("x + y")); // 直接调用,使用本地作用域,结果是 6
var geval = eval;
console.log(geval("x + y")); // 间接调用,使用全局作用域,throws ReferenceError 因为`x`未定义
}
1
2
3
4
5
6
7
var a = 1;
function f() {
var a = 2;
var e = eval;
e('console.log(a)')
}
f(); //=> 1访问全局作用域