eval 方法在各浏览器都按照规范定义,根据当前代码上下文执行 eval 方法中的脚本,如果没有指定上下文,该脚本将在全局上下文中执行。
window.eval 方法,在 IE6 IE7 IE8 中依然在脚本所在上下文中执行,而 Firefox Chrome Safari Opera 中则将该脚本会在全局上下文中执行。
造成的影响
window.eval 方法执行一段代码时,若在指定上下文中定义了变量, IE6 IE7 IE8 在全局上下文中无法访问该变量,导致代码报错。
测试一下下边的结果:
var i=2;
function g2(){
alert(i);
}
function do2() {
var i=1;
function go2(){
alert(i);
}
window.eval("alert('eval : '+i);");
}