考虑下面的代码片段:全局对象访问
var global = (function(){
return this;
}());
当这个执行全球将指向window
对象浏览器。
但是这在严格模式下不起作用。为什么?
考虑下面的代码片段:全局对象访问
var global = (function(){
return this;
}());
当这个执行全球将指向window
对象浏览器。
但是这在严格模式下不起作用。为什么?
原因已被错误解释:this
将不会是严格模式下的全局对象。下面是解决方法(假设对全球范围的运行):
var global = (function(g){
return g;
}(this));
究其原因,根据ES5 specification,是:
如果
this
是在严格的模式码进行评估,那么this
值不被强制对象。的null
或undefined
一个this
值不被转换为全局对象
从the MDN:
for a strict mode function, the specified this is used unchanged:
...
"use strict";
function fun() { return this; }
assert(fun() === undefined);
所以这是完全一样的规定。
的ES5规范允许您通过间接EVAL检索全局对象。
var global = (0, eval)('this');
这在严格和非严格模式下均可使用。
间接eval基本上是一个调用eval而不是引用(或没有绑定的名称是“eval”)的值。间接评估是在全局范围内执行的,全局范围内的this
是指全局对象。
有一个涵盖这个在详细的文章:http://perfectionkills.com/global-eval-what-are-the-options/
谢谢你,伙计..我完全需要.. –
'返回窗口;'严格模式。 – jAndy