在js中两个方法都是比较牛X的方法,他们可以将一段js代码字符串动态的变成已经执行的js代码。设计者肯定不会将一个实现相同目的的方法设计两遍,所以后面就记录一些差异共使用的时候参考。
在javascript模式中有提到“避免使用eval(),一定要使用可以使用new Function()来实现”
因为new Function()中的代码将在一个局部域中运行,不会牵涉到全局变量。(在一个即时函数中使用eval()也可以达到相同目的)
var jsstring="var num=1;console.log(num)";
eval(jsstring);
//1
console.log(typeof num)
//number
new Function(jsstring)();
//1
console.log(typeof num);
//undefined
(function(){eval(jsstring)})();
//1
console.log(typeof num)
//undefined
(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是一样的。