JavaScript中eval函数的用法

  1. eval函数会计算传给的字符串, 并把作为脚本代码来执行。

eval(str)

  此函数接受一个字符串作为参数,并把str当做一段JavaScript脚本代码来执行,如果str执行结果返回一个值则返回此值,否则返回undefined。

  在eval()函数里,它会将JavaScript代码进行编译,如果编译失败则抛出语法错误异常。如果编译成功但是如果这个代码没有值的话,eval()最终返回的结果是underfined。如果字符串抛出一个异常,则这个异常将把该调用传递给eval()。

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函数作用域,先看一个例子

function ab() {
    eval("var x = 1");
    console.log(x); // 1
}
ab(); console.log(x);
// Uncaught ReferenceError: x is not defined

  结论: 由以上表现可以得出,eval()函数并不会创建一个新的作用域,并且它的作用域就是它所在的作用域。这在所有主流浏览器都是如此。

      但是有时候需要将eval()函数的作用域设置为全局,当然可以将eval()在全局作用域中使用,但是往往实际应用中,需要在局部作用域使用具有全局作用域的此函数,这个时候可以用window.eval()的方式实现。

  例子如下

function ab() {
    window.eval("var x = 1");
    console.log(x); // 1
}
ab();
console.log(x); //  1

  在标准浏览器中,x现在是全局变量,但是在IE8浏览器下是会报错的

  此时可以使用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浏览器打印结果

猜你喜欢

转载自www.cnblogs.com/yyy6/p/9444381.html