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

一、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函数内的局部变量。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,784评论 0 17
  • 来源:仗剑走天涯! 关于javascript的作用域的一些总结,主要参考以上文章,加上自己的整理的理解。 近日对j...
    Michael_林阅读 4,492评论 0 1
  • Rem 现如今移动端的尺寸大小多种导致也页面不能在各种屏幕上适配,许多网站之前主要采取(1)采用的流式布局:通过百...
    wanpieces阅读 4,954评论 0 3
  • 犹如一座孤岛 没有大陆可以依靠 没有游人可以上岸 在茫茫大海中漂泊 一天天,一年年 没有终点,没有尽头 摒弃了所有...
    紫妖精阅读 1,456评论 0 1
  • 除却繁忙别都市, 直飞群山登阶石。 晨起太极抱红日, 险履崖壁入海底。 峰顶仙人指路客, 一宝难探悬天玺。 群石多...
    YIZ塘主阅读 3,276评论 1 7