JavaScript中eval函数的用法

  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浏览器打印结果

相关文章
相关标签/搜索