2014-02-05 5 views
12

의 루트 객체가 무엇 당신은 Node.js를에서 global object을 알 수 있습니다Node.js를

{오브젝트} 글로벌 네임 스페이스 개체를. 브라우저에서 최상위 범위 은 전역 범위입니다. 즉, 브라우저에서 전역 범위 var에있는 경우 전역 변수를 정의합니다. 노드에서는이 이 다릅니다. 최상위 범위는 전역 범위가 아닙니다. var 노드 모듈 내부의 항목은 해당 모듈에 대해 로컬입니다.

이제는 어디에도 문서화되지 않은 것으로 보이는 root 개체를 발견했습니다.

내가 root 같은 방법으로 global로 사용할 수있는 보이지만 : 쉘에서

test1.js

foo = 'bar'; // foo is defined in the global scope (no var in front of foo) 

test2.js

require('./test1.js'); 
console.log(root.foo); 

를 :

$ node test2.js 
bar 

쉘에서 globalroot을 검사하면 모양이 같습니다.

$ node 
> global 
... 
> root 
... 

을 그래서 rootglobal과 동일 함을 보인다보십시오. 그러나 중복성이 필요한 이유는 무엇입니까? root이 문서화되지 않은 이유는 무엇입니까? 더 이상 사용되지 않습니까?

+3

노드; 'root === global; // true' – jAndy

+4

'true'의 결과는 두 개의 이름이 같은 "객체 참조"를 참조하고 있다고 알려줍니다. – jAndy

+5

@ 레고 그러나 참조 평등은 깊은 평등보다 강력한 결과입니다 ... – OrangeDog

답변

13

정확히 global과 동일합니다.

이와 같은 등록되지 않은 속성이 몇 가지 있습니다. 그들은 노드 초기부터의 날짜이지만 하위 호환을 유지하기 위해 남겨졌으며이를 제거 할 필요가 없습니다.

나중에 언제든지 제거 할 수 있으므로 새 코드에서는 사용하지 마십시오.

+1

어떤 종류의 참고 문헌을 찾을 수 있습니까? 소스 코드에서도? –

+3

https://github.com/joyent/node/blob/v0.10.25/src/node.js#L160 – OrangeDog

+0

그래서 유효한 대답 인 것 같습니다. +1 –