eval全局作用域
问题描述:
在使用
eval()
执行代码的时候,遇到作用域的问题。
eval()
语句写于函数内,因此
eval()
内执行的变量也只是局部变量。函数外部无法访问。
问题分析:
var x = 10;
function testEval() {
eval("var x = 20");//局部变量
}
testEval();
console.log(x); //10
使用window.eval()
,谷歌环境测试:
var x = 10;
function testEval() {
window.eval("var x = 20");//全局变量
}
testEval();
console.log(x); //20
注意:
window.eval()
需要考虑浏览器兼容性:
IE6/7/8中,eval和window.eval一样,都是局部作用域
Firefox/Safari/Chrome/Opera/IE9中,window.eval即使写在自定义函数内使用的也是全局作用域。
使用全局eval()
将eval赋值给变量,使其作为一个全局函数调用:
var x = 10;
var geval = eval;
function testEval() {
geval("var x = 20");//全局变量
}
testEval();
console.log(x); //20
解决方法:
在自定义函数内要使eval内的变量具有全局作用域,可以使用以下两种方法:
- 使用
window.eval()
,需要考虑浏览器兼容性 - 将
eva
l赋值给变量,使之具有全局作用域