eval与Function

在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


另一个区别是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是一样的。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值