美文网首页
eval和new Function的区别

eval和new Function的区别

作者: 李贵功 | 来源:发表于2019-01-24 10:33 被阅读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函数内的局部变量。

注意,当我们在b函数中不定义变量a时,两种方法的输出相同。这与上述结论并不冲突。因为代码执行时,对变量的查找是从内到外的。当eval中的代码执行时,它依然是优先从b函数内部查找a变量,当查找不到时,再到全局中查找a,这时找到的a当然是'global scope'

var a = 'global scope'
        function b(){
            //var a = 'local scope' 
            eval('console.log(a)') //global scope
            ;(new Function('','console.log(a)'))() //global scope
        }
        b()
function sayHi(sName, sMessage) {
  alert("Hello " + sName + sMessage);
}
函数生命可以写成这样的形式
所以也就很容易理解 new Function()可以执行js代码了,并且,只能执行全局的
var sayHi = new Function("sName", "sMessage", "alert(\"Hello \" + sName + sMessage);");

注意:尽管可以使用 Function 构造函数创建函数,但最好不要使用它,因为用它定义函数比用传统方式要慢得多。不过,所有函数都应看作 Function 类的实例。

    var arr = [];
    var obj = {}
    console.log(Object.prototype.toString.call(arr));  //[object Array]
    console.log(Object.prototype.toString.call(obj));   //[object Object]s

相关文章

  • eval和new Function的区别

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

  • eval和new Function

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

  • eval() 和 new function()

    eval()和new function()的功能基本相似:将字符串解析成js可以看懂的语言,即将字符串当做代码来执...

  • new 一个 Function

    new Function 和 eval 的区别 一、从模板引擎 模板引擎可以怎样理解呢? 在一段 Html 文档里...

  • eval作用,以及和new Function()的区别

    一、eval的特点 eval不容易调试。用chromeDev等调试工具无法打断点调试 性能问题,eval不可预测,...

  • new 了一个 Function

    new Function 和 eval 的区别可以搜索到蛮多解释,但总觉得还不够具体,寻思着补补刀 一、从简易模板...

  • 关于javascript里的面向对象的new

    用new和不用new的区别;```function ting(){this.name='bnkeyle';this...

  • 关于eval与new Function

    由一道题目引发的思考:eval能访问上下文,new Function只能构建自己的一个私有作用域。 new Fun...

  • 【译】以 eval() 和 new Function() 执行

    原文地址:http://www.2ality.com/2014/01/eval.html原文作者:Dr. Axel...

  • new function

    先看看熟悉一点的写法: new function(){} 与 new Function()的区别 奇怪 有趣

网友评论

      本文标题:eval和new Function的区别

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