码迷,mamicode.com
首页 > 编程语言 > 详细

Javascript之eval与new Function的差异

时间:2014-10-23 20:58:33      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:js   evel   new function   

    当你必须要将字符串当做代码来执行,很多人第一印象是想到使用eval,  但实际上,使用new Function会更安全 。   

     为什么安全?  看个例子。

   

<script>
  var a = 1;
  
  eval("var a=2;");   //改变了当前域的变量a
  alert(a);
  
  new Function("var a=3;")();   //不改变当前作用域的变量
  alert(a);
</script>

    eval能够影响当前作用域及所有的父作用域的变量, 而new Function 它是运行在一个独立的function内, 并且他的父作用域是window而不是当前作用域。 我们再来看个例子。

  

<script>
  var a = 1;
  
  eval("var a=2;");   //改变了当前域的变量a
  alert(a);
  
  new Function("var a=3;")();   //不改变当前作用域的变量
  alert(a);
</script>



      可能有人会说:new function 是隔离于当前作用域的。 那我如何获取到 字符串当做代码运行之后的值呢 ? 比如一个经典的应用,将json字符串 转化为 对象字面量  

     如 var b =  ‘{"a":"b"}‘   你可以直接加个return, 如 var c = new Function("return  "+b)(); 这样c就是一个相同格式的对象了。  


本文出自 “leeturn” 博客,请务必保留此出处http://9476439.blog.51cto.com/9466439/1567361

Javascript之eval与new Function的差异

标签:js   evel   new function   

原文地址:http://9476439.blog.51cto.com/9466439/1567361

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!