eval到底有什么问题

  • 自己做了测试,putil.fieldValue的确会比eval性能高
  • 但是 eval 只在被直接调用并且调用函数就是 eval 本身时,才在当前作用域中执行。下面的例子是并没有被直接调用的例子。
var foo = 1;
function test() {
    var foo = 2;
    var bar = eval;
    bar('foo = 3');
    return foo;
}
test(); // 2 
foo; // 3

译者注上面的代码等价于在全局作用域中调用 eval

  1. “eval只是一个普通的函数,只不过他有一个快速通道通向编译器,可以将string变成可执行的代码。有类似功能的还有Function , setInterval 和 setTimeout。”
  2. “说到性能问题,在旧的浏览器中如果你使用了eval,性能会下降10倍。在现代浏览器中有两种编译模式:fast path和slow path。fast path是编译那些稳定和可预测(stable and predictable)的代码。而明显的,eval不可预测,所以将会使用slow path ,所以会慢。
  3. 在使用类似于Closure Compiler等压缩(混淆)代码时,使用eval会报错。”

参考文献

  1. JavaScript 为什么不推荐使用 eval?
  2. JavaScript探秘:eval()是“魔鬼” -- 简明现代魔法** eval是魔鬼。
  3. eval() isn’t evil, just misunderstood** eval不是魔鬼。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容