资讯专栏INFORMATION COLUMN

细说 Javascript 拾遗篇(一) : 远离 eval 函数

imtianx / 2749人阅读

摘要:然而,函数只有在当前作用域中直接被调用并且被调用的函数名为才会被执行。在全局作用域下,这个字符串会一直被执行,在这个情形下我们并没有直接调用函数,也可以执行字符串。总结函数应该尽可能地避免使用。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78096.html

相关文章

  • 细说 Javascript 遗篇(四) : setTimeout 和 setInterval

    摘要:当间隔时间设置较小时,将会导致回调函数堆积。处理可能阻塞的代码最简单且最可控的方式就是在回调函数内部使用函数。但是很明显,由于指定最大值的限制,还会有定时器没有被清除掉。另外,尽量避免使用函数,从而避免可能导致的回调函数堆积现象。 由于 Javascript 是异步的,因此我们可以通过 setTimeout 和 setInterval 函数来指定特定时间执行代码。 function ...

    wangjuntytl 评论0 收藏0
  • 细说 Javascript 遗篇(二) : undefined 和 null

    摘要:有两个可以表示空的值,分别是和,比较有作用的是前者。访问声明但未初始化的变量。有返回值时函数的表达式没有显式的返回任何内容。然而,为了比较其他变量和值,我们需要提前取得的值。因此,从标准实行后,全局变量已经是不再可写。 Javascript 有两个可以表示空的值,分别是 undefined 和 null,比较有作用的是前者。 undefined undefined 是一种值为 un...

    My_Oh_My 评论0 收藏0
  • 细说 Javascript 遗篇(三) : 自动插入分号

    摘要:此时会自动插入分号,解析器将再次尝试。工作原理下面的代码没有分号,因此解析器将会自己判断在哪些地方插入分号。前置小括号在有前置小括号的情形时,解析器将不会自动插入分号。这不仅将保证代码整体的一致性,也将有效地避免解析器对代码行为的错误改变。 尽管 Javascript 有类似 C 的句法风格,但是它并不强制在代码中使用分号,所以分号可能被省略。Javascript 并不是一个缺少分号的...

    mushang 评论0 收藏0
  • 细说 js 压缩、sourcemap、通过 sourcemap 查找原始报错信息

    摘要:文件就是记录了从源代码文件到压缩文件的一个代码对应关系记录表,通过压缩文件和文件可以原原本本找出源代码文件。 细说 js 压缩、sourcemap、通过 sourcemap 查找原始报错信息 1. js 压缩 js 压缩对前端开发者来说是一门必修课。 一般来说,压缩 js 主要出于以下两个目的: 减小代码体积,加快前端资源加载速度 保护源代码不被别人获取 压缩 js 使用的工具库:...

    douzifly 评论0 收藏0
  • 「干货」细说 Javascript 中的浮点数精度丢失问题(内附好课推荐)

    摘要:前言最近,朋友问了我这样一个问题在中的运算结果,为什么是这样的虽然我告诉他说,这是由于浮点数精度问题导致的。由于可以用阶码移动小数点,因此称为浮点数。它的实现遵循标准,使用位精度来表示浮点数。 showImg(https://segmentfault.com/img/remote/1460000018981071); 前言 最近,朋友 L 问了我这样一个问题:在 chrome 中的运算...

    senntyou 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<