zoukankan      html  css  js  c++  java
  • eval和new Function的区别

    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()    
  • 相关阅读:
    SpringMVC-初学习
    Mybatis-随笔
    Mybatis-逆向工程generator
    Mybatis-动态sql和模糊查询
    Mybatis-resultMap的一些用法(映射,关联查询)
    Mybatis基本的CRUD
    Spring框架(一)
    restful风格以及异常处理。
    SpringMVC后台校验
    Spring添加文件
  • 原文地址:https://www.cnblogs.com/zhangfengyang/p/5526024.html
Copyright © 2011-2022 走看看