首页 > 代码库 > Javascript之eval与new Function的差异
Javascript之eval与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的差异
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。