English
 电子信箱
 加入收藏

  威盾防火墙 >> 新闻中心 >> 威盾新闻 >> eval 与 let 的思考

 

eval 与 let 的思考

威盾防火墙 2014-12-11

 
原本是可以直接在当前作用域中执行代码的,但这样会使逻辑变得很不严谨。后来,严格模式中对eval做了一些限制,它会在其内部创建一个作用域,但和Function构造器不同的是它依然可以访问局部变量。现在再考虑上 ES6+ 的各种新特性,eval该何去何从?

「块作用域什么的我从来都没听说过!」

  eval无法理解块作用域,执行的let可能被解析为类似var的行为,至少 Firefox 目前的实现是如此。运行<script type="application/javascript;version=1.7">
void function(){
  let a = 1;
  {
    eval("let a = 2;");
    console.log(a);
  }
  console.log(a);
}();
</script>

延伸的思考

  其实这并不是个什么大问题,只是这个问题比较典型,让我想了很多。由于eval的存在,整个 JavaScript 要考虑的奇怪的问题多出了一大圈。也许它真不该存在了吧?每当一个新特性被加入,都要考虑一下eval问题,而且实际上会遇到的情况并不多。考虑临界情况本身没有问题,但是由eval的存在,临界情况更加边缘化,这样真的好吗?
  虽然目前的严格模式限制了eval的一些特性,但感觉它依然在妨碍语言的进步。是不是差不多到该废除的时候了?其实规范中废除也不会有什么问题,比如块作用域中定义函数一直都不在规范中,但浏览器一直在兼容,使用一直是普遍存在的。eval是不是也可以就这么从规范里移除掉,让浏览器自己看着办呢?

相关内容: 最新内容:
Apache的站点安全 身份验证和来源控制[2014-12-11]
Apache站点安全配置[2014-12-11]
WCF HttpBinding 安全解析5 Basic验证 IIS宿主[2014-12-11]
Windows Server 2008 IIS7 web服务器的部署[2014-12-11]
合并多个Apache的日志文件[2014-12-11]
把tomcat作为系统服务,随机启动[2014-12-11]