考慮下面的代碼片段:全局對象訪問
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