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