eval()和window.eval()都可以用来动态执行javascript代码,能给js编程带来很大的灵活性,两者唯一的差别在于执行上下文不同。
function testEval() {
eval("var strEval = 'local';");
}
function testWindowEval() {
window.eval("var strWindowEval = 'global';");
}
testEval();
testWindowEval();
alert(strWindowEval); //global
alert(strEval); //Uncaught ReferenceError: strEval is not defined
可以看到:window.eval()的执行上下文是“全局对象”,而eval()的执行上下文则是“调用eval的上下文环境”。现在我们看下,与eval有关的代码。
代码1:
var str = "global";
function test() {
alert(str); //undefined
var str = "local";
}
test();
alert(str); //global
如果你了解var关键字的"提前声明"特性,上面这段代码的执行结果很好理解。如果不明白,可以参考