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

  • 相关阅读:
    20211912 202120222 《网络攻防实践》第四周作业
    20211912 202120222 《网络攻防实践》第二周作业
    synchronized 与volatile
    一: Mysql字符集问题
    Label Distribution Learning
    Spring源码阅读 ConfigurationClassPostProcessor 配置类处理
    Spring源码阅读 prepareBeanFactory
    Spring源码阅读 importStack
    Spring源码阅读 @Import 处理
    Spring源码阅读 @ComponentScan 处理
  • 原文地址:https://www.cnblogs.com/yyy6/p/9444381.html
Copyright © 2020-2023  润新知