eval与Function

来源:互联网 发布:北京朝阳有线网络电视 编辑:程序博客网 时间:2024/05/01 17:19

在js中两个方法都是比较牛X的方法,他们可以将一段js代码字符串动态的变成已经执行的js代码。设计者肯定不会将一个实现相同目的的方法设计两遍,所以后面就记录一些差异共使用的时候参考。

在javascript模式中有提到“避免使用eval(),一定要使用可以使用new Function()来实现”


因为new Function()中的代码将在一个局部域中运行,不会牵涉到全局变量。(在一个即时函数中使用eval()也可以达到相同目的)

var jsstring="var num=1;console.log(num)";eval(jsstring);//1console.log(typeof num)//numbernew Function(jsstring)();//1console.log(typeof num);//undefined(function(){eval(jsstring)})();//1console.log(typeof num)//undefined


另一个区别是eval()会影响到作用域,也就是说他可以访问当前域的上下文,而new Function()只能看到全局作用域。


(function(){var num=1;eval("console.log(typeof num);num=2;")console.log(num)})()console.log(typeof num)//number//2//undefined(function(){var num=1;Function("console.log(typeof num);num=2;")()console.log(num)})()console.log(typeof num)//undefined//1//number

注:只用Function和new Function是一样的。



原创粉丝点击