zoukankan      html  css  js  c++  java
  • (0,eval)('this')与eval的区别

    看doT源码的时候,看到了这么一句代码:

    global = (function(){ return this || (0,eval)('this'); }());
    global.doT = doT;

    需要||后面的部分,是因为,this返回的是undefined

    但是(0, eval)('this')有点困惑

    这个链接大致说明了差别,多方考证,总结一下

    1.在ecma规范中,eval存在直接调用和间接调用两种方式,而直接调用时上下文为当前执行环境,间接调用时上下文为全局环境

    2.直接调用eval时,为直接调用,而使用表达式计算得到的eval是间接调用

    这样就很明了了,eval('this')和(0,eval)('this')的区别是,一个是在当前执行环境下,一个是在全局执行环境下,后面的调用方式才可百分百确定指向的是全局宿主对象

  • 相关阅读:
    JAVA 动态代理
    IDEA 配置阿里云Maven
    JAVA Spring5静态代理
    Spring5 常用注解
    react
    Angular
    微信小程序
    H5
    vue-ui
    jQuery
  • 原文地址:https://www.cnblogs.com/strayling/p/3763792.html
Copyright © 2011-2022 走看看