细说 Javascript 拾遗篇(一) : 阔别 eval 函数

Javascripteval 函数能够在当前作用域实行一段包括 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 函数

定时函数 setTimeoutsetInterval 函数都能够接收字符串作为本身的第一个参数。在全局作用域下,这个字符串会一向被实行,在这个情况下我们并没有直接挪用 eval 函数,也能够实行字符串。

安全问题

eval 函数毫无疑问将会形成安全问题,由于它会实行任何传给它的字符串,所以永久不要对未知或未信托源传来的字符串运用 eval 函数。

总结

eval 函数应当尽量地防止运用。任何运用 eval 函数的代码都应当被质疑。我以为 @justjavac 先辈在 《js中eval()函数的用途?》 问题中的回复总结的很好,那就是“进修 eval 函数,并阔别 eval 函数”。

参考

http://bonsaiden.github.io/JavaScript-Garden/#core.eval

    原文作者:StephenLee
    原文地址: https://segmentfault.com/a/1190000000511020
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞