zoukankan      html  css  js  c++  java
  • 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浏览器打印结果

  • 相关阅读:
    EF6 AddOrUpdate之后,数据没有改变而是新增了一条数据解决办法
    php多文件上传数组 转换
    windows svn 上传后 自动部署 到web目录下
    一组实用网址
    apache 虚拟ip
    ThinkPHP 空方法 显示
    thinkphp 创建子应用
    Zend Studio 9.0.4 新建项目
    鼠标悬浮停留三秒 显示大图
    mysql GROUP BY 与 ORDER BY 查询不是最新记录
  • 原文地址:https://www.cnblogs.com/yyy6/p/9444381.html
Copyright © 2011-2022 走看看