美文网首页
eval和new Function

eval和new Function

作者: 月下吴刚_c8c7 | 来源:发表于2018-10-08 18:39 被阅读0次

    eval和new Function都可以动态解析和执行字符串。但是它们对解析内容的运行环境判定不同。

    var a = 'global scope'
    function b(){
        var a = 'local scope'
        eval('console.log(a)')  // local scope
        (new Function('','console.log(a)'))()  //global scope
          }
     b()
    

    eval中的代码执行时的作用域为当前作用域。它可以访问到函数中的局部变量。
    new Function中的代码执行时的作用域为全局作用域,不论它的在哪个地方调用的。所以它访问的是全局变量a。它根本无法访问b函数内的局部变量。

    var fn = new function(arg1,arg2, ...,argN,function_body) ;
    

    上面的形式中,每个 arg 都是一个参数,最后一个参数是函数主体(要执行的代码)。这些参数必须是字符串。
    如下 函数 sayHi 有两种等同的定义方式:

    function sayHi(sName, sMessage) {
      alert("Hello " + sName + sMessage);
    }
    

    等同于 :

     var sayHi  =  new Function("sName", "sMessage", "alert(\"Hello \" + sName + sMessage);")
    

    注意 :
    尽管可以使用 Function 构造函数创建函数,但最好不要使用它,因为用它定义函数比用传统方式要慢得多。不过,所有函数都应看作 Function 类的实例。
    Function 对象的 length 属性,返回它实例函数的参数的形参个数 ;
    Function 对象的方法 : Function 对象也有与所有对象共享的 valueOf() 方法和 toString() 方法。这两个方法返回的都是函数的源代码,在调试时尤其有用 .

    相关文章

      网友评论

          本文标题:eval和new Function

          本文链接:https://www.haomeiwen.com/subject/rsijaftx.html