eval & window.eval & window.execScript 的区别

eval & window.eval & window.execScript 的区别

首先看一下 eval 和 window.eval 的区别

直接看示例代码:

var x = 2;

var test = function(){
   var x = 5;
   eval('alert(x)');
};

var test_win = function(){
   var x = 6;
   window.eval('alert(x)');
};

alert(x);           // IE6/7/8/9/Chrome/Ff: 2

test();             // IE6/7/8: 5, IE9/Chrome/Ff: 2

test_win();         // IE6/7/8: 6, IE9/Chrome/Ff: 2

这里首先定义了一个全局变量x,然后分别在 test 和 test_win 的局部闭包内定义了变量x。可以看到 eval 引用的局部变量的x,而 window.eval 引用的是全局变量x(在IE9,Chrome,FF下)。

各位看官看到这里应该已经发现了,在IE6/7/8下还有兼容性的问题,就是说eval和window.eval在IE6/7/8下的作用是一样的。

那如何才能兼容IE6/7/8呢?这个时候 window.execScript就派上用场了,而且这个玩意也只有IE才支持。

将上面的 window.eval 换成 window.execScript,IE下面测试结果也是返回 2,bingo!

总结:

eval 作用于局部作用域,window.eval 和 window.execScript 作用于全局作用域,也可以等价的这么看

eval === eval.call(this, str);

window.eval === eval.call(window, str);

 

 

 

 

posted on 2013-10-31 10:04  花森  阅读(599)  评论(0编辑  收藏  举报