美文网首页
eval作用,以及和new Function()的区别

eval作用,以及和new Function()的区别

作者: sdcV | 来源:发表于2017-07-20 21:56 被阅读130次
    一、eval的特点
    1. eval不容易调试。用chromeDev等调试工具无法打断点调试
    2. 性能问题,eval不可预测,所以浏览器将会使用slow path模式 ,所以会慢。
    3. 安全性
    4. 效率问题是程序逻辑问题。对于一些有执行字符串代码需求的程序中,不用eval而用其他方式模拟反而会带来更大的开销
    二、eval和new Function()
    • 两者可以动态解析和执行字符串。但是它们对解析内容的运行环境判定不同。
      var a = 'global scope'
      function b(){
      var a = 'local scope'
      eval('console.log(a)') //local scope
      ;(new Function('','console.log(a)'))() //global scope
      }
      b()

      • eval中的代码执行时的作用域为当前作用域。当eval中的代码执行时,它依然是优先从b函数内部查找a变量,没有再向外查找。
      • new Function()中的代码执行时的作用域为全局作用域,不论它的在哪个地方调用的。所以它访问的是全局变量a。它根本无法访问b函数内的局部变量。

    相关文章

      网友评论

          本文标题:eval作用,以及和new Function()的区别

          本文链接:https://www.haomeiwen.com/subject/jcnjkxtx.html