2013-01-17 2 views

답변

3

이유는 이미 dystroy에 의해 설명되었습니다. this은 엄격 모드의 전역 개체가 아닙니다.

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

이유는 ES5 specification에 따른 것이다 : this 엄격 모드 코드 내 평가

이면 this 값 여기서 해결 (즉 가정 전역에서 실행중인) 인 물체에 강요 당하지 않는다. null 또는 undefinedthis 값은

+1

이것은 'var global = this;'와 어떻게 다른가요? –

+0

그렇지 않습니다. 목적은 함수 내부의 전역 객체에 대한 액세스를 용이하게하는 것입니다. – bfavaretto

+1

오오 .. 오케이. 감사. –

1

: 지정된

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

그래서이 정확히입니다.

10

ES5 사양은 간접 평가를 통해 전역 객체를 검색 할 수 있습니다 전역 객체로 변환되지 않습니다.

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

엄격 모드와 비 엄격 모드 모두에서 작동합니다.

간접적 인 평가는 기본적으로 참조가 아닌 값에 의해 (또는 "eval"인 값 바인딩의 이름없이) eval을 호출하는 것입니다. 간접 평가는 전역 범위에서 실행되고 전역 범위의 this은 전역 개체를 참조합니다.

에서이 문제를 다루는 자세한 기사가 : http://perfectionkills.com/global-eval-what-are-the-options/

+0

고마워. 젠장. 정확히 내가 필요로하는 ... –