firefox中eval与window.eval的区别

都是网上找到的,但是想整理一下

最初是遇见了一个问题,写了一个动态将参数数组中参数都加到某个函数里面执行的方法,具体如下:

/**
 * 动态执行函数
 * 
 * @param func
 * @param params
 */
function executeFunction(func,params){
	if(func!=null && params!=null){
		var exeStr = "func.call(this";
		for(var i = 0 ; i<params.length ; i++){
			exeStr += ",params["+i+"]";
		}
		exeStr += ")";
		try{
			return window.eval(exeStr);
		}catch (e) {
			
		}
	}
}

 

结果在firefox里面无法执行(找这个错误就找了半天),firefox报的错误是func没有定义,刚开始认为是eval执行的语句中的参数必须是全局的,所以把func和params都赋值为全局的,问题算是解决了。过程中到网上又看到一个帖子,提出一个疑问,直接贴代码了

<script type="text/javascript">
    var foo = 1;
    void function(){
        var foo = 2;
        var e = eval;
        e("alert(foo)");
        eval("alert(foo)");
        window.alert(e === eval);
    }();
</script>

 

这段代码在ie中直接弹出2,2,true,而在firefox中弹出1,2,true。理论上将如果eval只能访问全局的,那么eval那句就不可能弹出2,应该也是1。正在百思不得其解的时候,又在网上找到一个神贴,专门分析了一下firefox下eval和window.eval在语法上的不同。直接上连接

http://hi.baidu.com/kooboy/item/a676850cdec17df3a01034b6

看完之后感觉这个像是有点像bug,就是只有出现了eval(..)字样的时候才是访问局部的,其它如window.eval,或者将window.eval、eval赋给其它变量之后再使用都是全局的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值