zoukankan      html  css  js  c++  java
  • js-eval运算符

    js中使用eval运算符需要注意——

    • eval()只有一个参数
    • 传入的参数是字符串时,才会去解析执行;否则,将直接返回这个参数
    • 作用域与调用它的变量作用域保持一致
    • 返回字符串中最后一个表达式或语句的值,如果没有,返回undefined
    • eval的字符串执行时的上下文环境和调用函数的上下文环境是一样的,所以下下面这样的例子,就会报脚本错误。
    function test(a) {
        eval(a);
    }
    
    test("return;");

    根据规定,可知,“return;”的上下文环境要和调用 test(a)的上下文环境一样,也就是全局的。因此,eval("return;");就相当于在全局环境中执行了一个return;语句,显然是错误的。

    全局eval

    如果对eval()赋予别名,然后使用其别名进行字符串的操作,那么规定此时eval会将字符串当成全局代码来执行。执行的代码可能会定义新的全局变量和全局函数,或者给全局变量赋值,但却不能使用或修改主调函数中的局部变量,因此,不会影响到函数内的代码优化。

    在ECMAScript 5中,规定直接调用eval()时,它总是在调用它的上下文作用域内执行。其它的间接调用则使用全局对象作为其上下文作用域,并且无法读、写、定义局部变量和函数。例子如下所示:

    var geval = eval;
    var x = "global", y = "global";
    
    function f() {
          var x = "local";
          eval( "x += ' changed' ; ");
           return x;
    }
    
    function g() {
            var y = "local";
            geval("y += ' changed';");
            return y;
    }
    
    console.log(f()); //local changed
    console.log(x); //global
    console.log(g());//local
    console.log(y);//global changed
  • 相关阅读:
    当前读与快照读
    Oracle临时表(Temporary Table)
    DG一主两备搭建
    配置dg broker
    源码编译安装PostgreSQL(pg12)
    Troubleshooting ORA-00600 [ORA_NPI_ERROR] ORA-00600: internal error code [kffilCreate01]
    mysql多实例配置(多配置文件)
    mysql多实例配置(单配置文件)
    Fixed Views Definitions in Oracle Database 11.2
    charles 禁用Cookies /Block Cookies Settings
  • 原文地址:https://www.cnblogs.com/lishidefengchen/p/8414409.html
Copyright © 2011-2022 走看看