严格模式下的全局对象访问

Abh*_*war 3 javascript ecmascript-5

请考虑以下代码段:

var global = (function(){
    return this;
}());
Run Code Online (Sandbox Code Playgroud)

当执行global时将指向window浏览器中的对象.
但这在严格模式下不起作用.为什么?

Nat*_*all 10

ES5规范允许您通过间接eval检索全局对象.

var global = (0, eval)('this');
Run Code Online (Sandbox Code Playgroud)

这适用于严格和非严格模式.

间接eval基本上是通过值而不是引用来调用eval(或者没有值绑定的名称是"eval").间接eval在全局范围内执行,而this在全局范围内是指全局对象.

有一篇详细的文章介绍了这一点:http://perfectionkills.com/global-eval-what-are-the-options/