2013-01-17 104 views
2

考虑下面的代码片段:全局对象访问

var global = (function(){ 
    return this; 
}()); 

当这个执行全球将指向window对象浏览器。
但是这在严格模式下不起作用。为什么?

+0

'返回窗口;'严格模式。 – jAndy

回答

3

原因已被错误解释:this将不会是严格模式下的全局对象。下面是解决方法(假设对全球范围的运行):

var global = (function(g){ 
    return g; 
}(this)); 

究其原因,根据ES5 specification,是:

如果this是在严格的模式码进行评估,那么this值不被强制对象。的nullundefined一个this值不被转换为全局对象

+1

这与'var global = this;'有什么不同? –

+0

它没有。目的是促进对函数内部的全局对象的访问。 – bfavaretto

+1

ohhh ..好的。谢谢。 –

1

the MDN

for a strict mode function, the specified this is used unchanged: 
... 
"use strict"; 
function fun() { return this; } 
assert(fun() === undefined); 

所以这是完全一样的规定。

10

的ES5规范允许您通过间接EVAL检索全局对象。

var global = (0, eval)('this'); 

这在严格和非严格模式下均可使用。

间接eval基本上是一个调用eval而不是引用(或没有绑定的名称是“eval”)的值。间接评估是在全局范围内执行的,全局范围内的this是指全局对象。

有一个涵盖这个在详细的文章:http://perfectionkills.com/global-eval-what-are-the-options/

+0

谢谢你,伙计..我完全需要.. –

相关问题