Javascript
的 eval
函数能够在当前作用域实行一段包括 Javascript
代码的字符串。
var foo = 1;
function test() {
var foo = 2;
eval('foo = 3');
return foo;
}
test(); // 3
foo; // 1
但是,eval
函数只要在当前作用域中直接被挪用而且被挪用的函数名为 eval
才会被实行。
var foo = 1;
function test() {
var foo = 2;
var bar = eval;
bar('foo = 3');
return foo;
}
test(); // 2
foo; // 3
eval
函数的运用应当被防止,99.9%
运用 eval
函数所完成的功用都能够经由过程不运用 eval
函数来完成。
假装的 eval 函数
定时函数 setTimeout
和 setInterval
函数都能够接收字符串作为本身的第一个参数。在全局作用域下,这个字符串会一向被实行,在这个情况下我们并没有直接挪用 eval
函数,也能够实行字符串。
安全问题
eval
函数毫无疑问将会形成安全问题,由于它会实行任何传给它的字符串,所以永久不要对未知或未信托源传来的字符串运用 eval
函数。
总结
eval
函数应当尽量地防止运用。任何运用 eval
函数的代码都应当被质疑。我以为 @justjavac 先辈在 《js中eval()函数的用途?》 问题中的回复总结的很好,那就是“进修 eval
函数,并阔别 eval
函数”。