1. eval函数会计算传给的字符串, 并把做为脚本代码来执行。浏览器
eval(str)
此函数接受一个字符串做为参数,并把str当作一段JavaScript脚本代码来执行,若是str执行结果返回一个值则返回此值,不然返回undefined。函数
在eval()函数里,它会将JavaScript代码进行编译,若是编译失败则抛出语法错误异常。若是编译成功可是若是这个代码没有值的话,eval()最终返回的结果是underfined。若是字符串抛出一个异常,则这个异常将把该调用传递给eval()。spa
eval("var a=1");//声明一个变量a并赋值1。 eval("2+3");//执行加运算,并返回运算值。 eval("mytest()");//执行mytest()函数。 eval("{b:2}");//声明一个对象。
var ob = '{ "name":"wuhan", "age":18 }';
var op = eval("("+ob+")"); // {name: "wuhan", age: 18}
2. eval函数做用域,先看一个例子3d
function ab() { eval("var x = 1"); console.log(x); // 1 }
ab(); console.log(x); // Uncaught ReferenceError: x is not defined
结论: 由以上表现能够得出,eval()函数并不会建立一个新的做用域,而且它的做用域就是它所在的做用域。这在全部主流浏览器都是如此。code
可是有时候须要将eval()函数的做用域设置为全局,固然能够将eval()在全局做用域中使用,可是每每实际应用中,须要在局部做用域使用具备全局做用域的此函数,这个时候能够用window.eval()的方式实现。对象
例子以下blog
function ab() { window.eval("var x = 1"); console.log(x); // 1 } ab(); console.log(x); // 1
在标准浏览器中,x如今是全局变量,可是在IE8浏览器下是会报错的ip
此时能够使用IE浏览器独有的window.execScript()解决IE8和IE8浏览器的问题。作用域
兼容函数以下: 字符串
function testEval() { if(window.execScript){ window.execScript("var a = 180"); }else{ window.eval("var a = 1000"); } console.log(a,'函数内部'); } testEval(); console.log(a,'函数外部');
标准浏览器打印结果
IE8浏览器打印结果