2013-01-17 101 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

謝謝你,夥計..我完全需要.. –

相關問題