(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')的区别是,一个是在当前执行环境下,一个是在全局执行环境下,后面的调用方式才可百分百确定指向的是全局宿主对象

原文地址:https://www.cnblogs.com/strayling/p/3763792.html